🐍 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()を使うと、新しいリストを作るぶん少しだけ無駄が生まれます。「元のリストの順序を保つ必要があるか」を基準に、どちらが使われているかを確認しましょう。