Pythonでリストをソート(sort, sorted)
この記事ではPythonにおけるリストのソート方法について解説します。リストを直接変更する`sort()`メソッドと、新しいソート済みリストを返す`sorted()`関数の違い、キー関数を使った高度なソート、そして様々なデータ型のソート方法を例と共に説明します。
目次
sort()メソッドによるリストの直接ソート
`list.sort()`メソッドはリストを直接ソートします。元のリストが変更されることに注意してください。
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers) # 出力: [1, 1, 2, 3, 4, 5, 6, 9]
ソートは昇順がデフォルトです。降順にソートするには`reverse=True`引数を指定します。
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort(reverse=True)
print(numbers) # 出力: [9, 6, 5, 4, 3, 2, 1, 1]
sorted()関数による新しいソート済みリストの作成
`sorted()`関数は元のリストを変更せずに、新しいソート済みリストを返します。
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
print(numbers) # 出力: [3, 1, 4, 1, 5, 9, 2, 6]
print(sorted_numbers) # 出力: [1, 1, 2, 3, 4, 5, 6, 9]
`sorted()`関数も`reverse=True`引数で降順ソートが可能です。
キー関数によるソート
キー関数を使うと、リストの要素の特定の属性に基づいてソートできます。`key`引数にソートキーを生成する関数を指定します。
words = ['banana', 'apple', 'cherry', 'date']
sorted_words = sorted(words, key=len)
print(sorted_words) # 出力: ['date', 'apple', 'banana', 'cherry']
この例では、`len`関数が各単語の長さを返し、その長さをソートキーとして使っています。
様々なデータ型のソート
数値、文字列だけでなく、様々なデータ型をソートできます。データ型によってデフォルトの比較方法が異なります。
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)
words = ['banana', 'apple', 'cherry', 'date']
words.sort()
print(words)
#タプル
tuple_list = [(1,'z'),(2,'a'),(3,'b')]
tuple_list.sort()
print(tuple_list)
タプルのソートは、先頭の要素から順に比較されます。
ソートアルゴリズムの指定
Python 2.3 以降では、`list.sort()`メソッドと`sorted()`関数に`key`引数と`reverse`引数の他に`timsort`アルゴリズムが使用されています。`timsort`は、マージソートと挿入ソートを組み合わせたアルゴリズムであり、多くの場合で効率的です。
アルゴリズムを明示的に指定する必要はほとんどありません。
まとめ
リストのソートには`sort()`メソッドと`sorted()`関数を使用します。`sort()`はリストを直接変更し、`sorted()`は新しいソート済みリストを返します。キー関数を使うことで高度なソートが可能になり、様々なデータ型を効率的にソートできます。
関連記事
- Pythonでリストをシャッフル(random.shuffle)
- Pythonでリストをコピー(copy, deepcopy)
- Pythonでリストに要素を追加(append, extend, insert)
- Pythonでリストの要素を検索(in演算子, index, count)
- Pythonでリストを逆順にする(reverse, スライス[::-1])
- Pythonでリストの要素を抽出(スライス, リスト内包表記)
- Pythonでリストの要素数を取得(len)
- Pythonでリストの要素を合計(sum)
- Pythonでリストの最大値・最小値を取得(max, min)
- Pythonでリストの要素を結合(join)