传递给sort函数的compare函数似乎正常工作,但是最终数组未正确排序。
from functools import cmp_to_key
def cmp(t1, t2):
print(t1)
print(t2)
if t1[0] < t2[0]:
print("Returning True")
return True
if t1[0] == t2[0]:
print(t1[1])
print(t2[1])
print("Returning: " + str(t1[1] > t2[1]))
return t1[1] > t2[1]
print("Returning False")
return False
a = [(1, 'coding'), (2, 'i'), (2, 'love')]
a.sort(key=cmp_to_key(cmp))
print(a)
生成以下输出:
(2, 'i')
(1, 'coding')
Returning False
(2, 'love')
(2, 'i')
love
i
Returning: True
[(1, 'coding'), (2, 'i'), (2, 'love')]
因此,当将(2,'love')与(2,'i')进行比较时,compare函数返回True,这意味着(2,'love')应该在(2,'i')之前。但这不是最终数组中发生的事情。有任何线索吗?
谢谢!
答案 0 :(得分:1)
您的方法中的问题在注释中得到了解释,因此我将补充一点,即可以用更短的时间来实现:
a = [(1, 'coding'), (2, 'i'), (2, 'love')]
a.sort(key=lambda t: (-t[0], t[1]), reverse=True)
# same as a.sort(key=lambda t: (t[0], -t[1])) but - can't be used when comparing strings
print(a)
# [(1, 'coding'), (2, 'love'), (2, 'i')]