python 2とpytho 3のソートの問題

2598 ワード

Python 2でソート
>>>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の操作をソートする