Categories: Python

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

この記事では、Pythonのリストやイテラブルの要素を並び替える方法を解説します。

要素を並び替えるには、リストに定義されているsort()メソッドを使うか、組み込み関数であるsorted()関数を使います。

sorted()関数は、リスト以外のイテラブルも並び替えることができるので便利です。

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

【Python】リスト含むシーケンスの要素を逆順にする方法この記事では、リストやタプルなどのシーケンスの要素を逆順する方法を解説します。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: '

もちろん、比較できる要素なら異なる型の値が格納されていても問題ありません。

# リストの生成
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)]
ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago