Python

【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)
動作解説
  1. リスト内の隣接する要素を比較し、値が大きい場合は交換します。
  2. 内側のループで最も大きな値が末尾に移動します。
  3. これを全要素について繰り返し、ソートされたリストを生成します。

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)
動作解説
  1. sorted()関数はリストを昇順に並び替えます。
  2. keyパラメータを指定することで、カスタムルールに基づいたソートが可能です。
  3. 例では、文字列の長さに基づいてソートしています。

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. 練習問題

以下の課題に挑戦してみましょう。

  1. ランダムな数値を含むリストを降順にソートしてください。
  2. 辞書をキーでソートするコードを書いてください。
  3. 複数条件(年齢、名前)でリストをソートしてください。

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関数の使い方を学びました。これらのスキルを活用して効率的にデータを操作しましょう。