缺少1个必要的位置参数 - 为什么?

时间:2013-12-17 18:52:21

标签: python

我写了这段代码:

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的所有论据......

1 个答案:

答案 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中删除。