pythonでsorted()とlist.sort()の使い方

2670 ワード

今日pythonが持参したsortedでリストをソートしますが、ここでまとめてみると、反復可能なオブジェクトであればsortedを使用できます.
sorted(itrearble, cmp=None, key=None, reverse=False)

=番号の後にデフォルト値が昇順で並べ替えられます.結果を降順に並べ替えるにはreverse=Trueを使用します.
最後に、iterable自体を変更するのではなく、ソートの結果を新しいリストに配置します.
eg:
1、単純ソート
sorted('123456')  #    

['1', '2', '3', '4', '5', '6']
sorted([1,4,5,2,3,6])  #   
[1, 2, 3, 4, 5, 6]
sorted({1:'q',3:'c',2:'g'}) #   ,            
[1, 2, 3]
sorted({1:'q',3:'c',2:'g'}.keys())  #      
[1, 2, 3]
sorted({1:'q',3:'c',2:'g'}.values())  #      
['c', 'g', 'q']
sorted({1:'q',3:'c',2:'g'}.items())  #             
[(1, 'q'), (2, 'g'), (3, 'c')]

2、要素指定の一部を並べ替え、キーワードを並べ替える
s = ['Chr1-10.txt','Chr1-1.txt','Chr1-2.txt','Chr1-14.txt','Chr1-3.txt','Chr1-20.txt','Chr1-5.txt']

-後の数字のサイズの昇順に並べ替えたいです.キーを使う
sorted(s, key=lambda d : int(d.split('-')[-1].split('.')[0]))

['Chr1-1.txt', 'Chr1-2.txt', 'Chr1-3.txt', 'Chr1-5.txt', 'Chr1-10.txt', 'Chr1-14.txt', 'Chr1-20.txt']

これがkeyの機能で、ソートのキーワードを制定して、通常はlambda関数で、もちろんあなたも事前にこの関数を定義することができます.このキーワードを整数に変換しないと、結果は次のようになります.
sorted(s, key=lambda d : d.split('-')[-1].split('.')[0])

['Chr1-1.txt', 'Chr1-10.txt', 'Chr1-14.txt', 'Chr1-2.txt', 'Chr1-20.txt', 'Chr1-3.txt', 'Chr1-5.txt']

これはこのキーワードを文字列として扱うことに相当し、pythonでは'2'>'10'
key=lambda x:len(x)がシーケンスの長さに従ってソートされるなど、希望するkeyをカスタマイズできます.key=lambda x:(x[1],x[0])2つの要素を押して、最初に、など...
3,cmpはあまり使いません.keyとreverseは単独のcmpより効率が高いからです.
降順配列を行う場合は、reverse=Trueを付けるだけです
まとめ:sortedとlist.sortはkey,reverseカスタマイズを受け入れます.でも違いは.list.sort()はリスト内のメソッドであり、リストにのみ使用できます.sortedは、反復可能な任意のオブジェクトに使用できます.list.sort()は元のシーケンスで修正され、新しいシーケンスは生成されません.古いシーケンスを必要としない場合はlistを選択しますsort(). sorted()は新しいシーケンスを返します.古いオブジェクトは依然として存在します.
辞書がある場合は、キーは正負ともに小数点が1つしかない数字の文字列で、数字を小さい列から大きい列のキーに押したい場合は、まずキーリストを浮動小数点型に変換します.浮動小数点型データをsortedでソートし、小数点が1つしかない数値文字列に変換します.
for i in ['%.1f'%k for k in sorted(float(j) for j in fb_RA_11.keys())]:

by freemao https://www.cnblogs.com/freemao/p/3869994.html