![](/img/trans.png)
[英]TypeError: 'cmp' is an invalid keyword argument for this function-Python
[英]TypeError: 'cmp' is an invalid keyword argument for this function
我正在使用Python3,但腳本與此版本不兼容,我遇到了一些錯誤。 現在我有cmp
參數的問題。 這是代碼
def my_cmp(x,y):
counter = lambda x, items: reduce(lambda a,b:a+b, [list(x).count(xx) for xx in items])
tmp = cmp(counter(x, [2,3,4,5]), counter(y, [2,3,4,5]))
return tmp if tmp!=0 else cmp(len(x),len(y))
for i, t in enumerate([tmp[0] for tmp in sorted(zip(tracks, self.mapping[idx][track_selection[-1]].iloc[0]), cmp=my_cmp, key=lambda x:x[1])]):
img[i,:len(t)] = t
我真的很感激如何在Python3中處理這個錯誤。
您應該嘗試將cmp
函數重寫為鍵函數。 在這種情況下,看起來您只需返回一個元素的counter()
函數輸出:
def my_key(elem):
counter = lambda x, items: sum(list(x).count(xx) for xx in items)
return counter(elem, [2, 3, 4, 5]), len(elem)
我冒昧地用sum()
函數替換reduce(...)
代碼,這是一個更加緊湊和可讀的方法來對一系列整數求和。
上面也將首先按counter()
的輸出進行排序,並在綁定的情況下按每個已排序元素的長度進行排序。
然而, counter
功能非常低效; 我在這里使用Counter()
類代替:
from collections import Counter
def my_key(elem):
counter = lambda x, items: sum(Counter(i for i in x if i in items).values())
return counter(elem, {2, 3, 4, 5}), len(elem)
這個函數適用於Python 2和3:
sorted(zip(tracks, self.mapping[idx][track_selection[-1]].iloc[0]),
key=lambda x: my_key(x[1]))
如果不能,可以使用cmp_to_key()
實用程序函數來調整cmp
參數,但考慮到這不是一個理想的解決方案(它會影響性能)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.