🐍 Python

list.sort() / sorted(iterable)

リストを並べ替える2つの方法です。見た目も動作もよく似ていますが、元のリストを直接書き換えるか、新しいリストを作って返すかという決定的な違いがあります。

list.sort(key=None, reverse=False)   # 元のリストを直接並べ替え、戻り値はNone
sorted(iterable, key=None, reverse=False)  # 新しいリストを返す。元は変わらない

sort()の基本:元のリストを書き換える

nums = [3, 1, 4, 1, 5]
nums.sort()
print(nums)  # [1, 1, 3, 4, 5]

sort()の戻り値はNone

ここが最も間違えやすいポイントです。sort()は元のリストを書き換えるだけで、戻り値は常にNoneです。result = my_list.sort()と書くと、resultはNoneになってしまいます。

nums2 = [3, 1, 2]
result = nums2.sort()
print(result)  # None

sorted()は新しいリストを返し、元は変わらない

nums3 = [3, 1, 2]
result2 = sorted(nums3)
print(result2, nums3)  # [1, 2, 3] [3, 1, 2](元は変わっていない)

keyとreverseで並べ替えをカスタマイズする

key引数に関数を渡すと、その関数の戻り値を基準に並べ替えます。reverse=Trueで降順にできます。

words = ["banana", "kiwi", "apple"]
words.sort(key=len)
print(words)  # ['kiwi', 'apple', 'banana'](文字数の短い順)

words.sort(reverse=True)
print(words)  # ['kiwi', 'banana', 'apple'](アルファベット降順)
パラメータ
key(省略可)
各要素から比較に使う値を取り出す関数。key=lenやkey=lambda x: x[1]のように指定する
reverse(省略可)
Trueにすると降順で並べ替える。省略時は昇順(False)
💡 AIコードレビュー観点:sort()とsorted()の使い分けが逆になっていないか

元のリストを保持したまま並べ替えた結果だけ欲しい場面でsort()が使われていると、意図せず元のリストの順序まで変わってしまいます。逆に「その場で並べ替えれば十分」な場面でsorted()を使うと、新しいリストを作るぶん少しだけ無駄が生まれます。「元のリストの順序を保つ必要があるか」を基準に、どちらが使われているかを確認しましょう。

← Python list クイックリファレンス一覧へ戻る