Python中級

中級 Pythonで学ぶデータ構造|練習問題編

導入

データ構造は、プログラムの効率性を大きく左右する要素です。特に中級のPythonエンジニアにとって、実務で遭遇する様々なデータ構造の使い方を理解することは非常に重要です。今回は、特定の実務シナリオを通じて、データ構造の理解を深める練習問題を用意しました。

教科書レベルの解説(データ構造)

重要な概念の整理

データ構造には、リスト、辞書、セット、タプルなど多くの種類があります。これらのデータ構造は、異なるシナリオでその特性を活かすことが求められます。たとえば、リストは順序を持つデータの集まりですが、辞書はキーと値のペアを管理するのに適しています。データ構造を選択する際には、どのような操作が頻繁に行われるかを考慮することが鍵となります。

コード例(Python)


def count_word_frequencies(text):
    words = text.split()
    frequency = {}
    for word in words:
        frequency[word] = frequency.get(word, 0) + 1
    return frequency

sample_text = "apple banana apple orange banana apple"
word_frequencies = count_word_frequencies(sample_text)
print(word_frequencies)

コードの行ごとの解説

  1. def count_word_frequencies(text): – 単語の頻度をカウントする関数を定義します。
  2. words = text.split() – 入力されたテキストを単語に分割し、リストに格納します。
  3. frequency = {} – 単語の頻度を記録するための空の辞書を作成します。
  4. for word in words: – 分割された単語リストをループします。
  5. frequency[word] = frequency.get(word, 0) + 1 – 各単語の出現回数を辞書に記録します。既に存在する場合はカウントを増やします。
  6. return frequency – 最終的な単語の頻度を返します。
  7. sample_text = "apple banana apple orange banana apple" – サンプルテキストを定義します。
  8. word_frequencies = count_word_frequencies(sample_text) – 関数を呼び出し、結果を変数に格納します。
  9. print(word_frequencies) – 結果を表示します。

練習問題編

次の練習問題に挑戦し、実務でのデータ構造の理解を深めましょう。

  1. 問題1: 任意の文字列を入力として受け取り、各文字の出現頻度を辞書として返す関数を作成せよ。
  2. 問題2: リスト内の数値の合計を計算する関数を作成せよ。ただし、リストにはネストされたリストが含まれる場合がある。
  3. 問題3: 辞書を受け取り、値が最大のキーを返す関数を作成せよ。

模範解答と解説

  1. 模範解答1:
    
    def count_char_frequencies(text):
        frequency = {}
        for char in text:
            frequency[char] = frequency.get(char, 0) + 1
        return frequency
    

    この関数は文字列を1文字ずつループし、各文字の出現頻度を辞書に記録します。

  2. 模範解答2:
    
    def sum_nested_list(nested_list):
        total = 0
        for item in nested_list:
            if isinstance(item, list):
                total += sum_nested_list(item)
            else:
                total += item
        return total
    

    この関数は再帰的にネストされたリストを処理し、数値を合計します。

  3. 模範解答3:
    
    def max_key_value(dictionary):
        return max(dictionary, key=dictionary.get)
    

    この関数は辞書の中から値が最大のキーを取得します。

まとめ

  • データ構造の選択は、プログラムの効率性に大きく影響します。
  • 実務での具体的なシナリオを通じて、データ構造の理解を深めることができます。
  • 練習問題を解くことで、実際の業務におけるデータ構造の活用方法を学べます。