Python上級

上級 Pythonで実装するアルゴリズム演習集|練習問題編

導入

アルゴリズム演習は、実務における問題解決能力を高めるための重要な要素です。特に、上級エンジニアに求められるのは、複雑なデータ構造やアルゴリズムを理解し、実装する力です。本記事では、実際の業務で遭遇する具体的なシチュエーションに基づいて、Pythonを用いたアルゴリズムの実装演習を行います。

教科書レベルの解説(アルゴリズム演習)

重要な概念の整理

本演習では、特定のデータセットを扱い、効率的な検索やデータ操作を行うためのアルゴリズムを実装します。特に、データの整列やフィルタリング、集約処理に焦点を当てます。これにより、実務でのデータ処理能力を向上させることが期待されます。

コード例(Python)


def group_and_count(data):
    result = {}
    for item in data:
        key = item['category']
        if key in result:
            result[key] += 1
        else:
            result[key] = 1
    return result

data = [
    {'category': 'fruit', 'name': 'apple'},
    {'category': 'fruit', 'name': 'banana'},
    {'category': 'vegetable', 'name': 'carrot'},
    {'category': 'fruit', 'name': 'apple'},
    {'category': 'vegetable', 'name': 'broccoli'},
]

print(group_and_count(data))

コードの行ごとの解説

  1. def group_and_count(data): – データを受け取り、カテゴリごとにカウントする関数を定義します。
  2. result = {} – 結果を格納するための空の辞書を初期化します。
  3. for item in data: – データセット内の各アイテムに対してループ処理を行います。
  4. key = item[‘category’] – 現在のアイテムのカテゴリを取得します。
  5. if key in result: – すでにカテゴリが結果に存在するかを確認します。
  6. result[key] += 1 – 存在する場合はカウントを増やします。
  7. result[key] = 1 – 存在しない場合は新たにカテゴリを追加し、カウントを1に設定します。
  8. return result – 最終的なカウント結果を返します。
  9. data = […] – テストデータを定義します。
  10. print(group_and_count(data)) – 関数を呼び出し、結果を表示します。

練習問題編

以下に、実際の業務で役立つアルゴリズムに関連した練習問題を用意しました。各問題に対する模範解答と解説も記載しています。

問題1

与えられたリストの中で、最も出現回数が多い要素を返す関数を実装してください。


from collections import Counter

def most_common(data):
    counter = Counter(data)
    return counter.most_common(1)[0][0]

print(most_common(['apple', 'banana', 'apple', 'orange', 'banana', 'banana']))

問題2

リスト内の要素を逆順に並べ替える関数を実装してください。


def reverse_list(data):
    return data[::-1]

print(reverse_list([1, 2, 3, 4, 5]))

問題3

二つのリストから、共通する要素を返す関数を実装してください。


def common_elements(list1, list2):
    return list(set(list1) & set(list2))

print(common_elements([1, 2, 3], [2, 3, 4]))

まとめ

  • 具体的なデータ処理のシナリオに基づいたアルゴリズムの実装を通じて、実務に役立つスキルを磨くことができる。
  • 与えられた問題に対して、効率的なアルゴリズムを選択し、実装する力が求められる。
  • 練習問題を通じて、理解を深め、実践的なスキルを向上させることが可能である。