在python 2.x中,我传递函数时SORT运作良好。 切换到python 3.x ..排序已更改,但是我不明白如何修改代码以使其在python 3中也能工作。 如果我不传递函数,那么一切都会正常,但是当我传递函数时,会出现错误:TypeError:必须将关键字参数用作键函数
我应该如何更改...。
A = [8, 89]
A = [str(c) for c in A]
def my_cmp(a,b):
return cmp(int(b+a), int(a+b))
A.sort(my_cmp)
print(A)
答案 0 :(得分:3)
cmp在Python 3中不再是有效的内置函数,但是您可以对其进行仿真。
sort在Python 3中的工作方式有所不同,但是您可以使用cmp_to_key来转换旧的Python 2样式排序。您必须导入functools才能使用cmp_to_key
。
functools.cmp_to_key()实用程序可用于将2.x样式cmp函数转换为键函数。
key
关键字参数这是一个示例实现:
from functools import cmp_to_key # required for cmp_to_key
def cmp(v1, v2): # emulate cmp from Python 2
if (v1 < v2):
return -1
elif (v1 == v2):
return 0
elif (v1 > v2):
return 1
A = [8, 89]
A = [str(c) for c in A]
def my_cmp(a, b):
return cmp(int(b + a), int(a + b))
A.sort(key = cmp_to_key(my_cmp)) # use cmp_to_key to emulate Python 2 behavior
print(A)
输出与Python 2输出完全相同:
['89', '8']