Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの辞書の共通部分(積集合)で3つの配列の共通要素を検索する方法

Pythonでデータを扱っていると、複数の配列(リスト)の中から共通する要素を抽出したい場面によく出会います。こうした処理は、配列を辞書型に変換することで、シンプルかつ効率的に実現できます。

この記事では、collectionsモジュールのCounterクラスを活用して、3つの配列から共通要素を見つける方法を、具体的なコード例とともにわかりやすく解説します。

Counterと辞書による共通要素の抽出手順

全体の流れは以下の4ステップです。

  1. Counterで各配列を変換:Counterは、リスト内の各要素とその出現回数をペアで保持するコンテナです。
  2. dict()で辞書化:Counterオブジェクトをdict()に渡すことで、通常の辞書形式に変換できます。
  3. &演算子で積集合を計算:items()同士に&演算子を適用すると、共通する(キー, 出現回数)のペアだけが残ります。
  4. 結果をリストに復元:新しい辞書の各アイテムをループ処理し、出現回数のぶんだけキーを結果リストへ追加します。

サンプルコード

from collections import Counter

arrayA = ['Sun', 12, 14, 11, 34]
arrayB = [6, 12, 'Sun', 11]
arrayC = [19, 6, 20, 'Sun', 12, 67, 11]

arrayA = Counter(arrayA)
arrayB = Counter(arrayB)
arrayC = Counter(arrayC)

# 積集合(共通部分)の計算
commonDict = dict(arrayA.items() & arrayB.items() & arrayC.items())
res = []

# 共通要素のリストを作成
for (key, val) in commonDict.items():
    for i in range(0, val):
        res.append(key)

print("The common values among the arrays are:\n ", res)

実行結果

上記のコードを実行すると、次のような出力が得られます。

The common values among the arrays are:
['Sun', 11, 12]

ポイント解説

この例では、3つの配列すべてに含まれる「Sun」「12」「11」が共通要素として正しく検出されています。&演算子は「キーと出現回数」のペア同士を比較するため、すべての配列で同じ回数出現している要素だけが結果に残る仕組みです。

また、積集合の計算は集合(set)ベースで動作するため、要素数が多いデータでも高速に処理できるのが大きなメリットです。複数のリストから重複要素を素早く見つけたいときに、ぜひ活用してみてください。

  1. 【Python】セット(set)のintersectionメソッドで3つのリストから共通要素を抽出する方法

    ユーザーが入力した3つのリストの中から、すべてのリストに共通して含まれる要素を取り出すのが、本記事で紹介するプログラムの目的です。ここでは、Pythonの集合型「セット(set)」が持つintersection(積集合)メソッドを活用します。 実行例 入力 A=[2, 3, 4, 5, 6] B=[2, 3, 7, 6, 90] C=[2, 3, 45, 34] 共通要素=[2, 3] アルゴリズム ステップ1:3つのリストの要素を入力します。 ステップ2:intersectionメソッドを使用します。まず各リストをセットに変換し、2つのセットの積集合を求めて共通要素を特定します。その後、その

  2. 3つのソート済み配列から共通要素を見つけるPythonプログラムの書き方

    この記事では、Pythonを使って3つのソート済み配列(リスト)に共通して含まれる要素を効率的に見つける方法を解説します。 基本的な流れは以下のとおりです。まず、ユーザーが入力した3つの未ソートのリストを用意し、それぞれをsorted()関数で昇順に並べ替えます。その後、各リストの先頭から同時に走査を行い、3つのリストの現在位置にある要素がすべて一致するかどうかを確認します。一致していればその要素を出力し、一致していなければ最も小さい値を持つインデックスを進めて次の要素へ移動します。 処理の概要 配列のサイズをそれぞれ n1、n2、n3 とし、各配列の走査位置を示すインデックスを i = 0、