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

【Python】2つのリスト間の欠落している値と追加されている値を見つける方法

集合論において、ある集合Aの「補集合」とは、Aに含まれない要素を指します。また、集合Bに対するAの「相対補集合」は、集合AとBの「差(difference)」とも呼ばれます。本記事では、この原理を応用し、Pythonで2つのリストを比較することで、互いに欠落している要素と余分な要素を効率よく見つける方法を解説します。Pythonのset型には差分を求めるためのdifference()メソッドが標準で用意されており、これを使うと非常にシンプルに実装できます。

アルゴリズム

  1. ユーザー入力から2つのリストAとBを作成します。
  2. AとBをそれぞれセット(set型)に変換します。
  3. 1つ目のリストに欠落している値を見つけるには、「Bには存在するがAには存在しない要素」をdifference()で求めます。
  4. 1つ目のリストに追加されている値を見つけるには、「Aには存在するがBには存在しない要素」をdifference()で求めます。
  5. 同じ手順を2つ目のリストにも適用します。

サンプルコード

# 欠落している要素と追加されている要素を見つける
A = list()
B = list()
n1 = int(input("1つ目のリストのサイズを入力してください:"))
n2 = int(input("2つ目のリストのサイズを入力してください:"))

print("1つ目のリストの要素を入力してください:")
for i in range(n1):
    k = int(input())
    A.append(k)

print("2つ目のリストの要素を入力してください:")
for j in range(n2):
    k1 = int(input())
    B.append(k1)

# 1つ目のリストの欠落要素と追加要素を表示
print("1つ目のリストに欠落している値:", set(B).difference(A))
print("1つ目のリストに追加されている値:", set(A).difference(B))

# 2つ目のリストの欠落要素と追加要素を表示
print("2つ目のリストに欠落している値:", set(A).difference(B))
print("2つ目のリストに追加されている値:", set(B).difference(A))

実行結果

1つ目のリストのサイズを入力してください:6
2つ目のリストのサイズを入力してください:5
1つ目のリストの要素を入力してください:
1
2
3
4
5
6
2つ目のリストの要素を入力してください:
4
5
6
7
8

1つ目のリストに欠落している値: {7, 8}
1つ目のリストに追加されている値: {1, 2, 3}
2つ目のリストに欠落している値: {1, 2, 3}
2つ目のリストに追加されている値: {7, 8}

処理のポイント

このプログラムの核となるのはset型のdifference()メソッドです。リストをそのまま比較すると順序や重複の扱いが煩雑になりますが、set型に変換すれば重複が自動的に除去され、集合演算だけで差分を求められます。

  • set(B).difference(A) … BにはあるがAにはない要素 = 1つ目のリストに欠けている値
  • set(A).difference(B) … AにはあるがBにはない要素 = 1つ目のリストに余分な値

なお、set型同士であれば「-」演算子を使っても同じ結果が得られます。

print(set(B) - set(A))   # set(B).difference(A) と同等
print(set(A) - set(B))   # set(A).difference(B) と同等

さらに、両方向の差分を一度に取得したい場合はsymmetric_difference()(対称差)も便利です。集合演算はリストをループで全件比較する方法よりも高速に動作するため、大量のデータを扱う場合にも有効です。

  1. Pythonでリスト内の最大値・最小値の位置を見つける方法

    Pythonでは、リスト内の最大値や最小値を求めるのが非常に簡単で、それらの位置(インデックス)も簡単に取得できます。Pythonには便利な組み込み関数が用意されており、min()はリスト内の最小値を求め、max()はリスト内の最大値を求めます。さらに、index()を使えば特定の要素のインデックス(位置)を調べることができます。 アルゴリズム maxminposition(A, n) /* Aはユーザーが入力したリスト、nはリストのサイズ */ ステップ1:組み込み関数を使って最小要素の位置を求める A.index(min(A)) ステップ2:組み込み関数を使って最

  2. 【初心者向け】Pythonで2つのリストの差分(違い)を抽出する方法を解説

    この記事では、2つのリストが与えられたときに、その差分(違い)を表示するPythonプログラムを紹介します。Pythonにはset()メソッドが用意されており、ここではこのメソッドを活用します。 セット(集合)とは、重複する要素を持たない順序なしのコレクションです。セットオブジェクトは、和集合・積集合・差集合・対称差といった数学的な操作もサポートしているため、リスト同士の比較に非常に便利です。 実行例 入力: A = [10, 15, 20, 25, 30, 35, 40] B = [25, 40, 35] 出力: [10, 20, 30, 15] 考え方 求めたい差分リストは、次のよう