sorted関数

2851 ワード

ソートもプログラムでよく使われるアルゴリズムです.バブルソートを使用しても高速ソートを使用しても、ソートのコアは2つの要素のサイズを比較することです.数字なら直接比較できますが、文字列か2つのdictなら?数学の大きさを直接比較するのは意味がないので,比較の過程は関数によって抽象化しなければならない.
Pythonに内蔵されているsorted()関数はリストをソートできます.
sorted([36, 5, -12, 9, -21])

さらに、sorted()関数も高次関数であり、key関数を受信してカスタムソートを実現することもできます.たとえば、絶対値サイズでソートします.
sorted([36, 5, -12, 9, -21], key=abs)
key         list       ,   key           。     list   key=abs    list:

その後、sorted()関数はkeysに従ってソートされ、対応関係に従ってlist対応要素が返されます.
デフォルトでは、文字列のソートは、ASCIIのサイズで比較されます.'Z' < 'a'の結果、大文字Zが小文字aの前に表示されます.
次に、ソートは大文字と小文字を無視し、アルファベット順にソートすることを提案します.このアルゴリズムを実装するには、既存のコードを変更する必要はありません.key関数を使用して文字列を大文字と小文字のソートを無視するようにマッピングできればいいです.大文字と小文字を無視して2つの文字列を比較するのは、実際には文字列を大文字(または小文字)にしてから比較します.
これにより、sortedにkey関数を入力すると、大文字と小文字を無視したソートが実現されます.
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)

逆ソートを行うには、key関数を変更する必要はありません.3番目のパラメータreverse=Trueに入力できます.
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
    return t[0].lower()
L2 = sorted(L, key=by_name)#      
print(L2)

def by_score(t):
    return t[1]

L2 = sorted(L,key=by_score,reverse=True)#        
print(L2)

結果:
[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]
[('Adam', 92), ('Lisa', 88), ('Bob', 75), ('Bart', 66)]