【Python】第7章第2回:ソートアルゴリズムとsorted関数
本記事では、Pythonでのソート操作を効率化するためのソートアルゴリズムの基礎と、便利なsorted
関数の使い方について解説します。
0. 記事の概要
この記事を読むメリット
- ソートアルゴリズムの基礎理解:バブルソートやクイックソートなどの基礎を学べます。
- Pythonの便利な機能:
sorted
関数の基本と応用を習得できます。 - 効率的なデータ操作:データを効率的に並び替える方法を実践的に学べます。
この記事で学べること
- 主要なソートアルゴリズムの基礎
- Pythonの
sorted
関数の基本とカスタマイズ - ソートを活用した実用的な応用例
1. ソートアルゴリズムとは?
1.1 ソートアルゴリズムの概要
ソートアルゴリズムは、データを昇順または降順に並び替える手法です。一般的なアルゴリズムには以下があります。
- バブルソート:隣接する要素を比較して交換し、最も簡単なソート方法。
- クイックソート:効率的な分割統治法を使用。
- マージソート:リストを分割して統合する再帰的な方法。
1.2 バブルソートの例
# バブルソートの実装例
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_numbers = bubble_sort(numbers)
print(sorted_numbers)
動作解説
- リスト内の隣接する要素を比較し、値が大きい場合は交換します。
- 内側のループで最も大きな値が末尾に移動します。
- これを全要素について繰り返し、ソートされたリストを生成します。
2. Pythonのsorted関数の基本
2.1 基本的な使い方
# 基本的なsorted関数の使い方
numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
2.2 カスタムキーの使用
# カスタムキーを使用したソート
names = ["Alice", "Bob", "Charlie", "David"]
sorted_names = sorted(names, key=lambda x: len(x))
print(sorted_names)
動作解説
sorted()
関数はリストを昇順に並び替えます。key
パラメータを指定することで、カスタムルールに基づいたソートが可能です。- 例では、文字列の長さに基づいてソートしています。
3. ソートの応用例
3.1 辞書のソート
# 辞書を値でソート
scores = {"Alice": 90, "Bob": 85, "Charlie": 95}
sorted_scores = dict(sorted(scores.items(), key=lambda item: item[1]))
print(sorted_scores)
3.2 複数条件でのソート
# 複数条件でのソート
people = [("Alice", 25), ("Bob", 30), ("Charlie", 25)]
sorted_people = sorted(people, key=lambda x: (x[1], x[0]))
print(sorted_people)
4. 練習問題
以下の課題に挑戦してみましょう。
- ランダムな数値を含むリストを降順にソートしてください。
- 辞書をキーでソートするコードを書いてください。
- 複数条件(年齢、名前)でリストをソートしてください。
5. 練習問題の解答と解説
問1〜3の解答例
# 問1: 降順にソート
numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_desc = sorted(numbers, reverse=True)
print(sorted_desc)
# 問2: 辞書をキーでソート
scores = {"Alice": 90, "Bob": 85, "Charlie": 95}
sorted_scores_by_key = dict(sorted(scores.items(), key=lambda item: item[0]))
print(sorted_scores_by_key)
# 問3: 年齢、名前でソート
people = [("Alice", 25), ("Bob", 30), ("Charlie", 25)]
sorted_people = sorted(people, key=lambda x: (x[1], x[0]))
print(sorted_people)
6. まとめ
本記事では、Pythonでのソートアルゴリズムの基礎とsorted
関数の使い方を学びました。これらのスキルを活用して効率的にデータを操作しましょう。