2011-10-18 9 views
3

一方、キー関数を見れば分かりやすく、compare関数を使って同じことをするソートを簡単に実装できます。次のように減少がある:他に"key"関数の不完全性を使った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 * 基本的には、compare関数が想定していることを明示的に明示したのは、neg、pos、zeroの代わりに< > =を呼び出すことです。しかし、私はそれがすべきだと思います。 –

+0

Evan、あなたは[回答を受け入れる]ことができますか(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)? – Jarekczek

関連する問題