Python

【Python】リストやイテラブルの要素を昇順・降順で並び替える【ソート】

この記事では、リストやイテラブルの要素を並び替える方法を解説します。要素を並び替えるには、リストに定義されているsort()メソッドを使うか、組み込み関数であるsorted()関数を使います。sorted()関数は、リスト以外のイテラブルも並び替えることができるので便利です。

逆順にしたい場合は以下の記事を参考にしてください。

【Python】リスト含むシーケンスの要素を逆順にする方法この記事では、リストやタプルなどのシーケンスの要素を逆順に取得する方法を解説します。 並び替え(ソート)をしたい場合は、以下の記事...

並び替える方法

リストの要素を並び替えるには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()関数を使いましょう!

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)]
最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』