Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
リスト.sort() / リスト.reverse() / リスト.copy()
リストを並べ替えたり、順序を逆にしたり、コピーを作成するメソッドです。元のリストを直接変更する点が特徴です。
構文
# リストをその場でソートします(戻り値は None)。 リスト.sort(key=None, reverse=False) # リストの要素の順序を反転します(戻り値は None)。 リスト.reverse() # リストの浅いコピーを返します。 リスト.copy() # sorted() は元のリストを変更せず新しいリストを返します。 sorted(イテラブル, key=None, reverse=False)
関数一覧
| メソッド・関数 | 概要 |
|---|---|
| list.sort(key, reverse) | リストをその場で(in-place)ソートします。元のリストが変更されます。戻り値は None です。 |
| list.reverse() | リストの要素の順序をその場で逆転させます。元のリストが変更されます。戻り値は None です。 |
| list.copy() | リストの浅いコピー(shallow copy)を返します。list[:] と同じ効果です。 |
| sorted(iterable, key, reverse) | 元のイテラブルを変更せず、ソートされた新しいリストを返します。リスト以外にも使えます。 |
サンプルコード
# sort() でリストをその場でソートします。
nums = [3, 1, 4, 1, 5, 9, 2, 6]
nums.sort()
print(nums) # [1, 1, 2, 3, 4, 5, 6, 9]
# reverse=True で降順にソートします。
nums.sort(reverse=True)
print(nums) # [9, 6, 5, 4, 3, 2, 1, 1]
# key 関数を指定してカスタムソートします。
fruits = ["みかん", "りんご", "いちご", "ぶどう"]
fruits.sort(key=len) # 文字列の長さでソートします。
print(fruits) # 文字数が少ない順に並びます。
# sort() の key に関数を指定する例です。
words = ["Banana", "apple", "Cherry", "date"]
words.sort(key=str.lower) # 大文字・小文字を区別せずソートします。
print(words) # ['apple', 'Banana', 'Cherry', 'date']
# 辞書のリストをキーでソートします。
students = [
{"name": "花子", "score": 92},
{"name": "太郎", "score": 85},
{"name": "次郎", "score": 78},
]
students.sort(key=lambda s: s["score"])
print(students[0]["name"]) # 次郎(スコアが最も低い)
# reverse() でリストの順序を逆にします。
items = [1, 2, 3, 4, 5]
items.reverse()
print(items) # [5, 4, 3, 2, 1]
# copy() でリストのコピーを作成します。
original = [1, 2, 3]
copied = original.copy()
copied.append(4)
print(original) # [1, 2, 3](元のリストは変更されていません)
print(copied) # [1, 2, 3, 4]
# sorted() は元のリストを変更しません。
nums2 = [3, 1, 4, 1, 5]
sorted_nums = sorted(nums2)
print(nums2) # [3, 1, 4, 1, 5](変更なし)
print(sorted_nums) # [1, 1, 3, 4, 5](新しいリスト)
# 文字列のリストを sorted() でソートします。
result = sorted(["cherry", "apple", "banana"])
print(result) # ['apple', 'banana', 'cherry']
概要
『sort()』と『sorted()』の大きな違いは、元のリストを変更するかどうかです。『sort()』は元のリストをその場で変更し、戻り値は None です。ソート後のリストを新しい変数に代入しようとすると None が入ってしまいます。元のリストを保持したい場合は必ず『sorted()』を使ってください。
Pythonのソートアルゴリズムには Timsort が使われており、安定ソート(同じ値の要素の相対的な順序が保たれる)です。これにより、複数のキーで段階的にソートする(最初に名前でソート、次にスコアでソート)ようなことが期待通りに動作します。
『copy()』は浅いコピー(shallow copy)を作成します。リストの要素が別のリストや辞書などのオブジェクトの場合、そのオブジェクト自体はコピーされずに参照が共有されます。完全なコピーが必要な場合は『copy.deepcopy()』を使ってください。スライスによるコピーや結合については『リストのスライス』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。