gpt4 book ai didi

python - 如何对一个列表进行排序,其中正数先于负数,值分别排序?

转载 作者:IT老高 更新时间:2023-10-28 21:58:58 37 4
gpt4 key购买 nike

我有一个包含正数和负数混合的列表,如下所示

lst = [1, -2, 10, -12, -4, -5, 9, 2]

我想要完成的是对列表进行排序,正数在负数之前,分别排序。

期望的输出:

[1, 2, 9, 10, -12, -5, -4, -2]

我能够弄清楚第一部分排序的正数在负数之前,不幸的是这并没有分别对正数和负数进行排序。

lst = [1, -2, 10, -12, -4, -5, 9, 2]
lst = sorted(lst, key=lambda o: not abs(o) == o)
print(lst)

>>> [1, 10, 2, 9, -2, -12, -4, -5]

如何使用 pythonic 解决方案实现我想要的排序?

最佳答案

您可以只使用常规排序,然后在 0 处将列表一分为二:

>>> lst
[1, -2, 10, -12, -4, -5, 9, 2]
>>> from bisect import bisect
>>> lst.sort()
>>> i = bisect(lst, 0) # use `bisect_left` instead if you want zeroes first
>>> lst[i:] + lst[:i]
[1, 2, 9, 10, -12, -5, -4, -2]

这里的最后一行利用了切片不变量 lst == lst[:n] + lst[n:]

另一种选择是使用元组作为排序键,并依赖 lexicographical元组的排序:

>>> sorted(lst, key=lambda x: (x<0, x))  # use <= instead if you want zeroes last
[1, 2, 9, 10, -12, -5, -4, -2]

关于python - 如何对一个列表进行排序,其中正数先于负数,值分别排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620804/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com