カスタムソート機能
Pythonは、リストをソートする()関数をソート建て:
>>>ソート([36、5、12、9、21 ])
[ 5、9、12、21、36]
しかし、より高次の関数であり、それはカスタム並べ替えを実装するために比較関数を受け取ることができる)(ソート、比較関数をx、yと比較する2つの要素を通過し、定義されているY返す場合、Xは、前面にあるべきです-1、yのxが背面、リターンであることがあれば。xおよびyは、0等しい場合。
私たちは逆の順序を達成するためにあるのであれば、あなただけが機能reversed_cmpを記述する必要があります。
DEF (x、y)をreversed_cmp: もし X> Y: リターン -1 であれば、X < Y: リターン 1つの リターン 0
このように、逆の順序を達成することができます(ソート)コールとreversed_cmpを渡します。
>>>ソート([36、5、12、9、21 ]、reversed_cmp)
[ 36、21、12、9、5]
シンタックスのpython3で(のpython3でCMPパラメータを削除するので、PythonのCMPファンクションキーの機能値に入ってくるが使用されます):
functools インポートcmp_to_key DEF :reversed_cmp(X、Y) であれば、X> Y: リターン -1 であれば、X < Y: リターン 1 リターンを0 ソートされた([ 36、5、12、9、21]、キー= cmp_to_key(reversed_cmp))
ソート()もソート文字列、ASCII文字列のデフォルトのサイズ比較することができます:
>>>([ソート' ボブ'、' 程度'、' 動物園'、' クレジット' ]) [ ' クレジット'、' 動物園'、' 程度'、' ボブ' ]
ASCIIコードのために '小さな「Z」比の前に「約」「動物園」行。
タスク
習慣に沿って、より多くの注文の場合を無視して、時々、文字列をソートする場合。ソートアルゴリズムはケースを無視し、ソート()高階関数を使用してください。
入力:[ 'ボブ'、 'について 、 '動物園'、 'クレジット'']
出力:[ '約'、 'ボブ '、 'クレジット'、 '動物園']
コード
functools インポート cmp_to_key #方法1 デフcmp_ignore_case(S1、S2): U1 = s1.upper() U2 = s2.upper() もし U1 < U2: リターン -1 なら U1> U2: リターン 1つの リターン0 プリント(ソート([ ' ボブ'、' 約'、' 動物園'、' クレジット' ]、キー= cmp_to_key( cmp_ignore_case))) デフ cmp_ignore_case(T): #方法2 リターンt.upper() 印刷(ソート([ ' ボブ'、' 程度'、' 動物園'、' クレジット' ]、キー= cmp_ignore_case)) 印刷(ソート([ ' ボブ'、' 約'、' 動物園'、' クレジット' ]、キー= ラムダ X:x.upper())) #方法3
業績
[ ' について'、' ボブ'、' クレジット'、' 動物園' ]