gpt4 book ai didi

python - 为什么在 python 中使用 sorted 函数进行多级排序会得到错误的答案?

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:25 25 4
gpt4 key购买 nike

此帖与How do I sort a list of dictionaries by values of the dictionary in Python?不一样,我认为使用 lambda 排序无法解决这个问题,因为排序应该对两个属性进行,一个是升序,另一个是降序。

我觉得应该是答案

第 2 列降序,第 3 列升序

[1, 5, 7]
[2, 3, 4]
[3, 2, 2]
[1, 2, 3]
[4, 2, 9]
[3, 1, 9]

但是输出是:

[1, 5, 7]
[2, 3, 4]
[1, 2, 3]
**[3, 2, 2]** i think it's wrong here
[4, 2, 9]
[3, 1, 9]

代码如下

l=[
[1,2,3],
[2,3,4],
[1,5,7],
[3,1,9],
[3,2,2],
[4,2,9]
]

def printlist(l):
for ll in l:
print ll

def comp1(a,b):
if a[1]<b[1]:
return 1
if a[1]==b[1]:
return a[2]>b[2]
else:
return -1

l3=sorted(l,cmp=comp1)
printlist(l3)

那么为什么程序会输出错误的答案呢?

编辑1:这里我选择 cmp 而不是 key=itemgetter(2,3) 因为可能有更复杂的结构,不能使用 itemgetter 进行排序, 但只能使用 cmp 函数进行排序。

最佳答案

应该这样做:

>>> sorted(l, key= lambda x:(-x[1], x[2]))
[
[1, 5, 7],
[2, 3, 4],
[3, 2, 2],
[1, 2, 3],
[4, 2, 9],
[3, 1, 9]
]

关于python - 为什么在 python 中使用 sorted 函数进行多级排序会得到错误的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22709310/

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