我写了这段代码:
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的所有论点......
该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中删除.
| 归档时间: |
|
| 查看次数: |
24591 次 |
| 最近记录: |