PYTHON MEBY

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()`は新しいソート済みリストを返します。キー関数を使うことで高度なソートが可能になり、様々なデータ型を効率的にソートできます。

関連記事