python 2とpytho 3のソートの問題
2598 ワード
Python 2でソート
しかしsorted()も高次関数であり、カスタムソートを実現するために比較関数を受信することができ、比較関数の定義は、比較する2つの要素x,yを入力し、xがyの前に並ぶべきであれば、-1を返し、xがyの後ろに並ぶべきであれば、1を返す.xとyが等しい場合は、0を返します.例えば逆順を実現する
しかしpython 3ではcmpが削除されたためsordedは単純なソートを直接使用できなくなった.
関数付きソートです.ここでsortedは、上記の例のように2つのパラメータkey=とreverse=(オプション)を追加します.
key=cmp_to_key(function)、比較方法の追加
一方、reserve=を加えると、前の関数の操作が逆順序になり、デフォルトはFalseで、関数reversed_cmpは正の順序付けを行い、reverse=Trueであれば、関数reversed_cmpは逆配列を行い,reverse=Trueであれば正配列を実現する.reverse=Falseの場合、関数reversed_に従います.cmpの操作をソートする
>>>sorted([36, 5, 12, 9, 21])
しかしsorted()も高次関数であり、カスタムソートを実現するために比較関数を受信することができ、比較関数の定義は、比較する2つの要素x,yを入力し、xがyの前に並ぶべきであれば、-1を返し、xがyの後ろに並ぶべきであれば、1を返す.xとyが等しい場合は、0を返します.例えば逆順を実現する
def reversed_cmp(x, y):
if x > y:
return -1
if x < y:
return 1
return 0
sorted([36, 5, 12, 9, 21],reversed_cmp)
しかしpython 3ではcmpが削除されたためsordedは単純なソートを直接使用できなくなった.
sorted([36, 5, 12, 9, 21])
関数付きソートです.ここでsortedは、上記の例のように2つのパラメータkey=とreverse=(オプション)を追加します.
from functools import cmp_to_key
print(sorted([1, 2, 5, 22, 0, 7, 9], key=cmp_to_key(reversed_cmp)))
key=cmp_to_key(function)、比較方法の追加
from functools import cmp_to_key
print(sorted([1, 2, 5, 22, 0, 7, 9], key=cmp_to_key(reversed_cmp),reserve = True))
一方、reserve=を加えると、前の関数の操作が逆順序になり、デフォルトはFalseで、関数reversed_cmpは正の順序付けを行い、reverse=Trueであれば、関数reversed_cmpは逆配列を行い,reverse=Trueであれば正配列を実現する.reverse=Falseの場合、関数reversed_に従います.cmpの操作をソートする