python listソートの2つの方法と例の説明
3260 ワード
リストをソートし、Pythonは2つの方法を提供しています.
方法1.Listの組み込み関数list.sortソート
list.sort(func=None, key=None, reverse=False)
Pythonの例:
方法2.シーケンスタイプ関数sorted(list)でソート
Pythonの例:
2つの方法の違い:
sorted(list)は、式として使用できるオブジェクトを返します.元のlistは変わらず、新しい順序のlistオブジェクトを生成します.
list.sort()はオブジェクトを返さず、既存のlistを変更します.他のsortの例:
例1:順方向ソート
例2:逆ソート
例3:2番目のキーワードのソート
例4:2番目のキーワードのソート
例5:2番目のキーワードのソート
例6:(DSUメソッド:Decorate-Sort-Undercorate)
以上、6のリストをソートする方法を示したが、インスタンス3.4.5.6は、リストitemのいずれかの項目に対して機能する
比較キーワードをソートする.
効率比較:
実験比較により,方法3は方法6より遅く,方法6は方法4より遅く,方法4と方法5はほぼ同等であった.
複数キーワード比較ソート:
例7:
このとき並べ替えられたLは2番目のキーワードだけで並べられていることがわかります.
2番目のキーワードで並べ替えてから1番目のキーワードで並べ替えたい場合は?2つの方法があります
例8:
例9:
なぜインスタンス8は機能するのでしょうか.なぜならtupleは左から右に比較され、1つ目を比較し、等しい場合は2つ目を比較するからです.
方法1.Listの組み込み関数list.sortソート
list.sort(func=None, key=None, reverse=False)
Pythonの例:
>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> list.sort()
>>> list
[2, 3, 5, 8, 9]
方法2.シーケンスタイプ関数sorted(list)でソート
Pythonの例:
>>> list = [2,5,8,9,3]
>>> list
[2,5,8,9,3]
>>> sorted(list)
[2, 3, 5, 8, 9]
2つの方法の違い:
sorted(list)は、式として使用できるオブジェクトを返します.元のlistは変わらず、新しい順序のlistオブジェクトを生成します.
list.sort()はオブジェクトを返さず、既存のlistを変更します.他のsortの例:
例1:順方向ソート
>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]
例2:逆ソート
>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]
例3:2番目のキーワードのソート
>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(lambda x,y:cmp(x[1],y[1]))
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
例4:2番目のキーワードのソート
>>>L = [('b',6),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1])
>>>L
>>>[('a', 1), ('c', 3), ('d', 4), ('b', 6)]
例5:2番目のキーワードのソート
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
例6:(DSUメソッド:Decorate-Sort-Undercorate)
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
以上、6のリストをソートする方法を示したが、インスタンス3.4.5.6は、リストitemのいずれかの項目に対して機能する
比較キーワードをソートする.
効率比較:
cmp < DSU < key
実験比較により,方法3は方法6より遅く,方法6は方法4より遅く,方法4と方法5はほぼ同等であった.
複数キーワード比較ソート:
例7:
>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
このとき並べ替えられたLは2番目のキーワードだけで並べられていることがわかります.
2番目のキーワードで並べ替えてから1番目のキーワードで並べ替えたい場合は?2つの方法があります
例8:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
例9:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
なぜインスタンス8は機能するのでしょうか.なぜならtupleは左から右に比較され、1つ目を比較し、等しい場合は2つ目を比較するからです.