説明する
sorted() 関数は、すべての反復可能なオブジェクトを並べ替えます。
ソートとソートの違い:
sort はリストに適用されるメソッドであり、sorted はすべての反復可能なオブジェクトを並べ替えることができます。
list の sort メソッドは既存のリストに対する操作を返しますが、組み込み関数のsorted メソッドは元のリストに基づく操作ではなく新しいリストを返します。
例:
>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
>>> a=[5,2,3,1,4]
>>> a.sort()
>>> a
[1,2,3,4,5]
注 1. list の list.sort() メソッドを使用することもできます。このメソッドは元のリストを変更します (戻り値は None)。このメソッドは通常、sorted() よりも便利ではありません。元のリストが必要ない場合は、list.sort() メソッドの方がわずかに効率的です。
注 2. もう 1 つの違いは、list.sort() メソッドが list に対してのみ定義されていることです。 sorted() 関数は任意の反復可能オブジェクトを受け取ることができます。
>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: & #39;A'})
[1, 2, 3, 4, 5]
注3. キーを使用して逆順にソートします。
>>> example_list = [5, 0, 6, 1, 2, 7, 3, 4]
>>> result_list = sorted(example_list, key=lambda x: x*-1)
>>> print(result_list)
[7, 6, 5, 4, 3, 2, 1, 0]
>>>
注 4. 逆ソートを実行するには、3 番目のパラメータ reverse=True を渡します。
>>> example_list = [5, 0, 6, 1, 2, 7, 3, 4]
>>> sorted(example_list, reverse=True)
[7, 6, 5, 4, 3, 2, 1, 0]
文法
ソートされた構文:
ソート済み(反復可能、キー=なし、リバース=False)
パラメータの説明:
- iterable – 反復可能なオブジェクト。
- key - 主に比較要素に使用され、パラメーターは 1 つだけです。特定の関数のパラメーターは反復可能オブジェクトから取得され、反復可能オブジェクト内の要素がソート用に指定されます。
- reverse -- 並べ替えルール。降順の場合は reverse = True、昇順の場合は reverse = False (デフォルト)。
戻り値
並べ替えられたリストを返します。
エレガントな例:
例 1: 配列/辞書をキー値で並べ替えます。次に例を示します。
array = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
array = sorted(array,key=lambda x:x["age"])
print(array)
出力結果:
[{'年齢': 10, '名前': 'c'}, {'年齢': 20, '名前 39;: 'a'}、{'年齢': 25、'名前': 'b'}]
例 2: 複数列の並べ替え
まず、グレードの降順で並べ替え、同じグレードのものを名前の昇順で並べ替えます。
d1 = [{'name':'alice', 'score':38}, {'name':'bob', 'score':18}, {'name':'darl', 'score':28}, {'name':'christ', 'score':28}]
l = sorted(d1, key=lambda x:(-x['score'], x['name']))
print(l)
出力結果:
[{'名前': 'アリス'、'スコア': 38}、{'名前': 'キリスト' 、「スコア」: 28}、{「名前」: 「ダール」、「スコア」: 28}、「名前」 #39;: 「ボブ」、「スコア」: 18}]
例 3: 逆順に並べ替える
example_list = [34, 34, 55, 66, 77, 45, 32, 24]
result_list = sorted(example_list, key=lambda x: -x)
result_list
出力結果:
[77、66、55、45、34、34、32、24]
例 4: 文字列内のキーワードを並べ替える
test1 = ['data/test1/8973.jpg',
'data/test1/8974.jpg',
'data/test1/8976.jpg',
'data/test1/8975.jpg']
imgs = sorted(test1, key=lambda x: int(x.split('.')[-2].split('/')[-1]))
imgs
出力結果:
['data/test1/8973.jpg'、'data/test1/8974.jpg'、'data/test1/8975.jpg'、'データ/test1/8976.jpg']