Pythonでlistのソートをする方法

Pythonでlistのソートをする方法

Pythonでリストをソートする方法について説明します。
Pythonのバージョン3では、リストのソートには主に2つの方法があります。
これらはsort()メソッドとsorted()関数です。

sort()メソッド

リストオブジェクトにはsort()メソッドがあり、これを使用するとリストそのものが昇順にソートされます。
このメソッドはリストを直接変更するため、新しいリストは返されません。
以下はsort()メソッドを使用する例です。

numbers = [4, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers)  # 出力: [1, 2, 4, 5, 6, 9]

sort()メソッドは、リストの要素が比較可能である必要があります。
数値、文字列、日付などは比較可能ですが、異なる型の要素が混在するリストをソートすることはできません。
また、sort()メソッドには、オプションの引数reverseがあり、これをTrueに設定すると降順にソートすることができます。

numbers = [4, 2, 9, 1, 5, 6]
numbers.sort(reverse=True)
print(numbers)  # 出力: [9, 6, 5, 4, 2, 1]

sorted()関数

一方で、sorted()関数は元のリストを変更せず、新しいソート済みリストを返します。
こちらもreverse引数を指定することができます。
以下はsorted()関数を使用する例です。

numbers = [4, 2, 9, 1, 5, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 出力: [1, 2, 4, 5, 6, 9]
print(numbers)         # 出力: [4, 2, 9, 1, 5, 6]

この場合、元のリストnumbersは変更されず、sorted_numbersにソートされたリストが格納されます。

sorted()関数にもkey引数があり、ソートの基準を指定することができます。
例えば、文字列のリストをその長さでソートする場合、次のようにkey引数を使います。

words = ['banana', 'apple', 'cherry', 'date']
sorted_words = sorted(words, key=len)
print(sorted_words)  # 出力: ['date', 'apple', 'banana', 'cherry']

ソートの安定性

Pythonのsort()メソッドおよびsorted()関数は安定ソートを行います。
つまり、同じ値を持つ要素の順序は元の順序が保たれます。

その他の注意点

  • ソート可能なデータ型である必要があります。

比較不可能なデータ型が含まれているリストはソートできません。

  • key引数には関数やラムダ式を指定して、カスタムのソート順序を定義することができます。
  • パフォーマンス面では、sort()メソッドはリストをその場で変更するため、メモリの使用が少なくて済みますが、sorted()関数は新しいリストを生成するため、メモリの使用が増える可能性があります。

以上が、Pythonでリストをソートする基本的な方法です。
どちらの方法を使用するかは、ソートした結果を元のリストに反映させるか、新しいリストを得るかによって選択することができます。