この記事では、Pythonのリストやイテラブルの要素を並び替える方法を解説します。
要素を並び替えるには、リストに定義されているsort()
メソッドを使うか、組み込み関数であるsorted()
関数を使います。
sorted()
関数は、リスト以外のイテラブルも並び替えることができるので便利です。
逆順にしたい場合は以下の記事を参考にしてください。
並び替える方法
リストの要素を並び替えるにはlist
型に定義されているsort()
メソッドを使います。引数を指定する場合は、必ずキーワードを指定して名前=値
という形で渡す。
list.sort(*, key=None, reverse=False)
リスト含めたイテラブルを並び替えたい場合は、組み込み関数であるsorted()
関数を使います。
sorted(iterable, *, key=None, reverse=False)
リストのsort()
メソッドは自身を並び替えますがsorted()
関数は引数で受け取ったイテラブルからソートしたリストを新たに生成して返します。
# リストの生成
l = [3, 1, 2]
# 並び替え
l.sort()
print(l)
# タプルの生成
t = (6, 4, 5)
# 引数で受け取った t を ソートしたリストで返す
sorted_t = sorted(t)
print(f'並び替え前: {t}, 並び替え後: {sorted_t}')
実行結果
[1, 2, 3]
並び替え前: (6, 4, 5), 並び替え後: [4, 5, 6]
並び替える前のオブジェクトが必要な場合はsorted()
関数を使いましょう!
比較できない要素が格納されている場合
sort()
メソッドやsorted()
関数では要素を比較して並び替えを行っています。なので、比較できない要素が格納されている場合はTypeError
例外が送出されます。
# リストの生成
l = [3, '1', 2]
# 並び替え
sorted_l = sorted(l)
実行結果
Traceback (most recent call last):
File "/Users/user/Desktop/Python/test.py", line 5, in
sorted_l = sorted(l)
TypeError: '<' not supported between instances of 'str' and 'int'
もちろん、比較できる要素なら異なる型の値が格納されていても問題ありません。
# リストの生成
l = [3, 1.0, 2]
# 並び替え
print(sorted(l))
実行結果
[1.0, 2, 3]
昇順で並び替える
昇順で並び替えるには引数を指定せずに呼び出します。
# リストの生成
l = [3, 1, 2]
# 昇順並び替え
sorted_l = sorted(l)
l.sort()
# 出力
print(sorted_l)
print(l)
実行結果
[1, 2, 3]
[1, 2, 3]
降順で並び替える
reverse
引数をTrue
に指定することで降順で並び替えることができる。
# リストの生成
l = [3, 1, 2]
# 降順並び替え
sorted_l = sorted(l, reverse=True)
l.sort(reverse=True)
# 出力
print(sorted_l)
print(l)
実行結果
[3, 2, 1]
[3, 2, 1]
任意の関数の戻り値で並び替え
key
引数に引数を1つ取る関数を指定することで並び替えする際に、その関数の戻り値を比較して並び替えをすることができます。
以下のコードは、リストに格納されているタプルの合計値で並び替えてを行なっています。
# リストの生成
l = [(4, 6), (3, 5), (8, 1)]
# sum()関数を指定してタプルの要素の合計値で並び替え
sorted_l = sorted(l, key=sum)
print(sorted_l)
実行結果
[(3, 5), (8, 1), (4, 6)]
多次元配列の並び替え
多次元配列を並び替えると格納された配列の1つ目の要素同士で並び替えが行われる。
# タプルを格納したリストの生成
l = [(4, 6), (3, 5), (8, 1), (6, 2), (9, 3), (1, 8)]
# 並び替え
sorted_l = sorted(l)
# 出力
print(sorted_l)
実行結果
[(1, 8), (3, 5), (4, 6), (6, 2), (8, 1), (9, 3)]
1つ目の要素が同じ値の場合は、2つ目の要素を使って並び替えられる。
# タプルを格納したリストの生成
l = [(4, 2), (4, 3), (4, 1)]
# 並び替え
sorted_l = sorted(l)
# 出力
print(sorted_l)
実行結果
[(4, 1), (4, 2), (4, 3)]