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

hte*_*teo 2 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)
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,我有这个错误:

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'
Run Code Online (Sandbox Code Playgroud)

为什么?我写了lambda的所有论点......

Mar*_*ers 7

sort键功能只有一次闯过一个说法,但你lambda想有2个参数.用于关键功能list.sort()sorted()不是一个cmp()函数.

只需keyList.index()在此处使用您的关键功能:

letterlist.sort(key=keyList.index)
Run Code Online (Sandbox Code Playgroud)

然后,Python根据键函数返回的值对列表进行排序.在引擎盖下,Python将使用键功能"装饰"您的值,对值进行排序,然后再次进行未装饰.

如果你确实有一个复杂的cmp()函数,并且你不太清楚如何将它转换为一个关键函数,你可以使用functools.cmp_to_key()实用程序cmp()函数为你包装函数:

from functools import cmp_to_key

letterlist.sort(key=cmp_to_key(keyL))
Run Code Online (Sandbox Code Playgroud)

但请注意,内置cmp()函数已完全从Python 3中删除.