目标:
问题:
sorted(List, key=lambda element: (A(element), B(element)))
总是按A和B排序,导致性能降低。恳求:
感谢每一个答案
这是旧cmp
关键字更有用的情况。在Python 2中,您将编写类似
sorted(List, cmp=lambda x, y: cmp(A(x), A(y)) or cmp(B(x), B(y)))
和B(x)
并且B(y)
只有在cmp(A(x), A(y))
返回0时才被调用,指示A(x) == A(y)
。
Python 3摆脱了cmp
关键字参数sorted
以及内置函数cmp
,因此您需要首先重新实现cmp
,然后使用functools.cmp_to_key
来定义一个等效key
函数。
from functools import cmp_to_key
def cmp(x,y):
if x < y:
return -1
elif x > y:
return 1
else:
return 0
sorted(List, key=cmp_to_key(lambda x,y: cmp(A(x), A(y)) or cmp(B(x), B(y))))
由于我们还是从头开始编写,因此您可以通过折叠A
或B
将其定义cmp
简化一下cmp
。
def cmp_with(f, x, y):
fx = f(x)
fy = f(y)
if fx < fy:
return -1
elif fx > fy:
return 1
else:
return 0
sorted(List, key=cmp_to_key(lambda x, y: cmp_with(A, x, y) or cmp_with(B, x, y))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句