2011-10-18 53 views
3

一方面很容易看到給定的關鍵函數,可以輕鬆實現一種使用比較函數執行相同操作的排序。還原如下:使用「鍵」功能不足的Python排序

def compare(x,y): 
    return key(x) - key(y) 

;另一方面,我們怎麼知道我們肯定不會被通過地圖使用的關鍵要素制約每種那種失去潛在的分類法,?舉例來說,假設我要排序長度2元組(x,y),其中我堅持以下比較列表方法:

def compare(tup1,tup2): 
    if (tup1[1] < tup2[0]): 
     return -1 
    if (tup1[0] % 2 == 0): 
     return 1 
    if (tup1[0] - tup2[1] < 4): 
     return 0 
    else: 
     return 1 

現在告訴我,我該怎麼翻譯這個比較成相應的「鑰匙」功能這樣我的排序算法以同樣的方式進行?這不是一個人爲的例子,因爲這些定製的排序在搜索期間出現在對稱破壞算法中,並且非常重要。

回答

6

使用functools.cmp_to_key,這將保證排序行爲與您的比較函數相同。這個函數的來源可以在Python的Sorting How To文檔中找到。

+0

花了我一點時間來弄清楚發生了什麼,然後我打了我的額頭。尼斯。 – kindall

+0

* face palm * 它通過調用< > =而不是使用neg,pos,zero,基本明確了比較函數應該做什麼。非常感謝,我認爲應該這樣做。 –

+0

Evan,你知道你可以[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)? – Jarekczek