【初心者向け】Pythonで2つのリストの差分(違い)を抽出する方法を解説
この記事では、2つのリストが与えられたときに、その差分(違い)を表示するPythonプログラムを紹介します。Pythonにはset()メソッドが用意されており、ここではこのメソッドを活用します。
セット(集合)とは、重複する要素を持たない順序なしのコレクションです。セットオブジェクトは、和集合・積集合・差集合・対称差といった数学的な操作もサポートしているため、リスト同士の比較に非常に便利です。
実行例
入力: A = [10, 15, 20, 25, 30, 35, 40] B = [25, 40, 35] 出力: [10, 20, 30, 15]
考え方
求めたい差分リストは、次のように表せます。
差分リスト = A − B
つまり、リストAには含まれているが、リストBには含まれていない要素を取り出すということです。
アルゴリズム
ステップ1:2つの配列を入力として受け取る。 ステップ2:リストを明示的にセット(set)に変換する。 ステップ3:減算演算子を使って、一方から他方を引く。
サンプルコード
# set() を使って2つのリストの差分を取得するPythonコード
def Diff(A, B):
print("2つのリストの差分 ::>")
return (list(set(A) - set(B)))
# ドライバーコード
A = list()
n1 = int(input("1つ目のリストのサイズを入力してください ::"))
print("1つ目のリストの要素を入力してください ::")
for i in range(int(n1)):
k = int(input(""))
A.append(k)
B = list()
n2 = int(input("2つ目のリストのサイズを入力してください ::"))
print("2つ目のリストの要素を入力してください ::")
for i in range(int(n2)):
k = int(input(""))
B.append(k)
print(Diff(A, B))
実行結果
1つ目のリストのサイズを入力してください ::5 1つ目のリストの要素を入力してください :: 11 22 33 44 55 2つ目のリストのサイズを入力してください ::4 2つ目のリストの要素を入力してください :: 11 55 44 99 2つのリストの差分 ::> [33, 22]
補足:set()以外の方法
なお、セットに変換すると要素の順序は保持されません。元のリストの順序を維持したまま差分を求めたい場合は、リスト内包表記を使う方法もあります。
def Diff(A, B):
return [x for x in A if x not in B]
この方法であれば、Aの要素順がそのまま保たれるため、用途に応じて使い分けるとよいでしょう。
-
Pythonのリストと配列(array)の違いとは?使い分けのポイントを解説
Pythonのリストと配列、何が違うのか?Pythonでデータを扱う際、「リスト(list)」と「配列(array.array)」はどちらもよく使われるデータ構造ですが、それぞれ特徴が大きく異なります。この記事では、両者の違いと使い分けのポイントをわかりやすく解説します。リスト(list):柔軟性が高い万能型Pythonのリストは非常に柔軟なデータ構造です。最大の特徴は、異なる型のデータを混在させて格納できる点にあります。例えば、以下のように整数・文字列・ネストしたリストなどを自由に組み合わせられます。[1, a, [1, 2], string]また、リストへの要素追加(append)は償却定
-
Pythonのリストとタプルの違いとは?特徴と使い分けのポイントを解説
Pythonでは複数の値をまとめて扱えるシーケンス型として、リスト(list)とタプル(tuple)がよく使われます。どちらも似たような役割を持っていますが、決定的な違いがあります。それはタプルが「不変(immutable)」であるという点です。 最大の違い:タプルは変更できない タプルは一度作成すると、その中の値を後から変更することができません。一方、リストは「可変(mutable)」なので、作成後でも要素の追加・削除・変更が自由に行えます。 # リスト:変更可能 my_list = [1, 2, 3] my_list[0] = 10 # 正常に変更できる # タプル:変更不可 my_