我知道有幾個像這樣命名的問題,但我似乎無法得到他們的答案。在Python中使用自定義比較函數對列表進行排序列表
我有一個清單列表,50次5個元素。現在我想通過對每個元素應用自定義比較函數來對這個列表進行排序。該函數計算元素排序的列表的適應度。我創建了兩個功能,比較和健身:
def compare(item1, item2):
return (fitness(item1) < fitness(item2))
和
def fitness(item):
return item[0]+item[1]+item[2]+item[3]+item[4]
然後我試圖打電話給他們:
sorted(mylist, cmp=compare)
或
sorted(mylist, key=fitness)
或
sorted(mylist, cmp=compare, key=fitness)
或
sorted(mylist, cmp=lambda x,y: compare(x,y))
另外我試圖list.sort()具有相同的參數。但在任何情況下,這些函數都不會獲得一個列表作爲參數,而是一個None
。我不知道這是爲什麼,大部分來自C++,這與我的回調函數的任何想法都是矛盾的。我如何使用自定義函數對這個列表進行排序?
編輯 我發現我的錯誤。在創建原始列表的鏈中,一個函數沒有返回任何內容,但是使用了返回值。對不起,煩擾
顯示的代碼,你還指望什麼,你會得到什麼。 – delnan 2011-03-06 20:15:33
請注意,您的'compare'函數是不正確的,因爲它只返回True或False,並且不區分'item1'和'item2'是否相等,'item1'大於'item2'。寫'compare'的正確方法是返回'cmp(fitness(item1),fitness(item2))'。但使用'key'更好。 – jchl 2011-03-07 10:04:40