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
の繰り返しが削除されます。この挙動は予想通りです。
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