ドキュメントから引用:
cmp(x, y)
2つのオブジェクトxとyを比較し、結果に応じて整数を返します。戻り値は、の場合は負、の場合
x < y
はゼロ、の場合x == y
は厳密に正になりますx > y
。
私は戻り値が常に-1
、0
であると仮定していまし1
たが、ドキュメントには明示的には記載されておらず、ゼロと正/負の戻り値についてのみ言及されています。
の戻り値が、、、またはではない状況はありますcmp(x,y)
か?-1
0
1
ドキュメントから引用:
cmp(x, y)
2つのオブジェクトxとyを比較し、結果に応じて整数を返します。戻り値は、の場合は負、の場合
x < y
はゼロ、の場合x == y
は厳密に正になりますx > y
。
私は戻り値が常に-1
、0
であると仮定していまし1
たが、ドキュメントには明示的には記載されておらず、ゼロと正/負の戻り値についてのみ言及されています。
の戻り値が、、、またはではない状況はありますcmp(x,y)
か?-1
0
1
いいえ、ドキュメントには、yaluesは何でもかまいませんと明示的に記載されています。指定される唯一の値は0
、比較されるオブジェクトが等しいかどうかです。値のみが表示されるという事実を信用しないでください。これは実装の詳細であり、変更される可能性があります*。したがって、常にと0を確認-1
し0
てください。1
<
>
cmp
*:注-pyhton3で廃止されたため、実際には変更する機会はありません。代わりに豊富な比較を使用してください。
list.sort
のdocstringは興味深いものですが、信頼できるのは0だけです。
print list.sort.__doc__
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
しかし実際には、ここに見られるように、sortは実際にはその比較関数にこれを課しません。
def mycmp(a, b):
print "mycmp(): a - b = ", a - b
return a - b
L = [50, 30, 20, 40, 70, 50]
>>> L.sort(cmp=mycmp)
mycmp(): a - b = -20
mycmp(): a - b = -10
mycmp(): a - b = 20
mycmp(): a - b = 10
mycmp(): a - b = -10
mycmp(): a - b = 30
mycmp(): a - b = 20
mycmp(): a - b = 10
mycmp(): a - b = -20
mycmp(): a - b = 0
>>> print L
[20, 30, 40, 50, 50, 70]
ただ興味があるだけですが、明らかに、、、または、sort
以外の値でうまく機能している-1
ので、あなたもそうする必要があります!0
+1