我写了这段代码:
keyList=['a','c','b','y','z','x']
letterlist=['b','c','a','z','y','x']
def keyL(x, y):
xIndex=keyList.index(x)
yIndex=keyList.index(y)
print(cmp(xIndex,yIndex))
return cmp(xIndex,yIndex)
print(letterlist)
letterlist.sort(key=lambda x, y: keyL(x, y))
print(letterlist)
但是当我运行代码时,我有这个错误:
File "C:\Python33\prova.py", line 14, in <module>
letterlist.sort(key=lambda x, y: keyL(x, y))
TypeError: <lambda>() missing 1 required positional argument: 'y'
为什么呢?我写了lambda的所有论据......
答案 0 :(得分:7)
sort
键函数只传递一个参数,但你的lambda
想要有2个参数。用于list.sort()
或sorted()
的关键功能是不 cmp()
功能。
在这里使用keyList.index()
作为关键功能:
letterlist.sort(key=keyList.index)
然后,Python会根据key函数返回的值对列表进行排序。在引擎盖下,Python将使用键功能“装饰”您的值,对值进行排序,然后再次进行不装饰。
如果您确实有一个复杂的cmp()
函数,并且您不太清楚如何将其转换为关键函数,则可以使用functools.cmp_to_key()
实用程序函数来包装cmp()
适合你的功能:
from functools import cmp_to_key
letterlist.sort(key=cmp_to_key(keyL))
但请注意,内置的cmp()
函数已从Python 3中删除。