Python でリスト減算を実行する

Rayven Esplanada 2023年10月10日
  1. Python でリストを set に変換してリストの減算を実行する
  2. Python でリスト内包表記を使用してリストの違いを取得する
Python でリスト減算を実行する

このチュートリアルでは、Python でリスト減算、言い換えればリストマイナスリストを実行する方法を示します。

数学の集合理論で定義されているように、2つの集合の差は、一方の集合から他方の集合には存在しない要素を指します。

たとえば、次の 2つのリストを宣言すると次のようになります。

list1 = [1, 2, 4]
list2 = [2, 3]

list1 - list2 の差分は [1, 4] となり、list2 - list1[3] になります。

Python でリストを set に変換してリストの減算を実行する

Python では集合理論演算がサポートされています。しかし、これらの操作をサポートしているのは set データ型のみです。したがって、set 演算を利用するには、リストを集合に変換しなければならません。これは、関数 set() の周りにリストを巻きつけることで可能になります。

注意
リストをセットに変換すると、あらゆる種類の順序が削除され、リストから重複した値が削除されます。
listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

print("A - B = ", setA - setB)

出力:

A - B =  {1, 4, 9, 14}

結果は 2つの集合の差を出力し、重複した値を削除します。

関数 list() を使用して、結果を set からリストに変換できます。

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]
setA = set(listA)
setB = set(listB)

list_diff = list(setA - setB)

print("A - B: ", list_diff)

出力:

A - B:  [1, 4, 9, 14]

Python でリスト内包表記を使用してリストの違いを取得する

リスト内包を使用して、ある要素が最初のリストにのみ存在し、2 番目のリストには存在しないかどうかをチェックすることができます。この解決策により、リストを集合に変換せずに差分演算を行うことが可能になります。

listA = [1, 2, 4, 7, 9, 11, 11, 14, 14]
listB = [2, 3, 7, 8, 11, 13, 13, 16]

listSub = [elem for elem in listA if elem not in listB]

print("A - B =", listSub)

出力:

A - B = [1, 4, 9, 14, 14]

この解決策はリストの順序をいじらず、重複を除去します。

しかし、listA では 11 の値が 2 回繰り返され、11 が両方の集合に存在するため、A - B の結果からは 11 の繰り返しが削除されます。この挙動は予想通りです。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python List