Python3 sorted() 関数
説明
sorted()関数はすべての反復可能なオブジェクトに対してソート操作を行います。
sort と sorted の違い:
sort は list に適用されるメソッドで、sorted はすべての反復可能なオブジェクトに対してソート操作を行うことができます。
list の sort メソッドは既存のリストに対して操作を行い、組み込み関数 sorted メソッドは元のリスト上で操作するのではなく、新しい list を返します。
構文
sorted の構文:
sorted(iterable, key=None, reverse=False)
パラメータの説明:
- iterable -- 反復可能なオブジェクト。
- key -- 主に比較に使用する要素で、パラメータは1つだけです。具体的な関数のパラメータは反復可能なオブジェクトから取得され、反復可能なオブジェクト内の1つの要素を指定してソートを行います。
- reverse -- ソートの規則。reverse = True は降順、reverse = False は昇順(デフォルト)。
戻り値
再ソートされたリストを返します。
例
以下の例は、sorted の最も簡単な使用方法を示しています:
>>> sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5] # デフォルトは昇順
[1, 2, 3, 4, 5] # デフォルトは昇順
list の list.sort() メソッドを使用することもできます。このメソッドは元の list を変更します(戻り値は None)。通常、このメソッドは sorted() ほど便利ではありません - 元の list が必要ない場合、list.sort() メソッドの効率は少し高くなります。
>>> a=[5,2,3,1,4]
>>> a.sort()
>>> a
[1,2,3,4,5]
>>> a.sort()
>>> a
[1,2,3,4,5]
もう1つの違いは、list.sort() メソッドは list にのみ定義されていることです。一方、sorted() 関数は任意の iterable を受け取ることができます。
>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
key を使用して降順ソートを行う
>>> 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]
>>>
>>> result_list = sorted(example_list, key=lambda x: x*-1)
>>> print(result_list)
[7, 6, 5, 4, 3, 2, 1, 0]
>>>
逆順ソートを行うには、第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]
>>> sorted(example_list, reverse=True)
[7, 6, 5, 4, 3, 2, 1, 0]
以下はより複雑な例です。メダルランキングをソートします。データには15か国の金、銀、銅のデータが含まれており、次のものを\n区切り文字として使用します:
例
s = ドイツ 10 11 16\nイタリア 10 10 20\nオランダ 10 12 14\nフランス 10 12 11\nイギリス 22 21 22\n中国 38 32 18\n日本 27 14 17\nアメリカ 39 41 33\nロシアオリンピック委員会 20 28 23\nオーストラリア 17 7 22\nハンガリー 6 7 7\nカナダ 7 6 11\nキューバ 7 3 5\nブラジル 7 6 8\nニュージーランド 7 6 7
stodata = s.split('\n',-1)
# sortedを使用
para = {}
for line in range(len(stodata)):
# 各行のデータ
data = stodata[line].split(' ')
print(data)
# データ構造を組み立てる para={'China': [], 'Russia': []}
para[data[0]] = [int('-' + i) for i in data[1:]]
# ソート開始 (x
new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
print()
c=[]
for i in new_para:
c.append((i[0]))
for j in range(15):
print(f"{(j+1):2d} {c[j]}")
stodata = s.split('\n',-1)
# sortedを使用
para = {}
for line in range(len(stodata)):
# 各行のデータ
data = stodata[line].split(' ')
print(data)
# データ構造を組み立てる para={'China': [], 'Russia': []}
para[data[0]] = [int('-' + i) for i in data[1:]]
# ソート開始 (x
new_para = sorted(para.items(), key=lambda x: (x[1], x[0]))
print()
c=[]
for i in new_para:
c.append((i[0]))
for j in range(15):
print(f"{(j+1):2d} {c[j]}")
出力結果は次のとおりです:
['德国', '10', '11', '16'] ['意大利', '10', '10', '20'] ['荷兰', '10', '12', '14'] ['法国', '10', '12', '11'] ['英国', '22', '21', '22'] ['中国', '38', '32', '18'] ['日本', '27', '14', '17'] ['美国', '39', '41', '33'] ['俄罗斯奥委会', '20', '28', '23'] ['澳大利亚', '17', '7', '22'] ['匈牙利', '6', '7', '7'] ['加拿大', '7', '6', '11'] ['古巴', '7', '3', '5'] ['巴西', '7', '6', '8'] ['新西兰', '7', '6', '7'] 1 美国 2 中国 3 日本 4 英国 5 俄罗斯奥委会 6 澳大利亚 7 荷兰 8 法国 9 德国 10 意大利 11 加拿大 12 巴西 13 新西兰 14 古巴 15 匈牙利その他の拡張
Python3 組み込み関数