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

【初心者向け】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の要素順がそのまま保たれるため、用途に応じて使い分けるとよいでしょう。

  1. Pythonのリストと配列(array)の違いとは?使い分けのポイントを解説

    Pythonのリストと配列、何が違うのか?Pythonでデータを扱う際、「リスト(list)」と「配列(array.array)」はどちらもよく使われるデータ構造ですが、それぞれ特徴が大きく異なります。この記事では、両者の違いと使い分けのポイントをわかりやすく解説します。リスト(list):柔軟性が高い万能型Pythonのリストは非常に柔軟なデータ構造です。最大の特徴は、異なる型のデータを混在させて格納できる点にあります。例えば、以下のように整数・文字列・ネストしたリストなどを自由に組み合わせられます。[1, a, [1, 2], string]また、リストへの要素追加(append)は償却定

  2. Pythonのリストとタプルの違いとは?特徴と使い分けのポイントを解説

    Pythonでは複数の値をまとめて扱えるシーケンス型として、リスト(list)とタプル(tuple)がよく使われます。どちらも似たような役割を持っていますが、決定的な違いがあります。それはタプルが「不変(immutable)」であるという点です。 最大の違い:タプルは変更できない タプルは一度作成すると、その中の値を後から変更することができません。一方、リストは「可変(mutable)」なので、作成後でも要素の追加・削除・変更が自由に行えます。 # リスト:変更可能 my_list = [1, 2, 3] my_list[0] = 10 # 正常に変更できる # タプル:変更不可 my_