Python でのリストの交差

Muhammad Maisam Abbas 2023年10月10日
  1. Python で & 演算子を使ってリストの交差を取得する
  2. Python で intersection() メソッドを用いてリストの交差を取得する
Python でのリストの交差

このチュートリアルでは、Python で 2つのリストの間の交差を取得するいくつかの方法について説明します。

交差 (または AND) は基本的にセットのために特別に設計された操作です。これは 2つの集合の共通要素を選択することで動作します。例として、

setA = {1, 2, 3, 4, 5}
setB = {0, 2, 4, 6}

print(setA & setB)

出力:

{2, 4}

上の例では、setAsetB は 2つの集合であり、演算子 & はその集合に対して交差演算を行います。

デフォルトでは、Python はリストの直接交差をサポートしていません。しかし、少し手を加えることで、リスト上でも交差を実行することができます。

Python で & 演算子を使ってリストの交差を取得する

上で述べたように、& 演算子はリストでは使えません。そのため、set() メソッドを使ってリストをセットに変更する必要があります。

list1 = [1, 2, 3, 4, 5]
list2 = [0, 2, 4, 6]

set1 = set(list1)
set2 = set(list2)

set3 = set1 & set2
list3 = list(set3)

print(list3)

出力:

[2, 4]

関数 set() はリストを集合に変換します。また、& 操作は、両方のセットに共通する要素をすべて含むセットを返します。知っての通り、この操作は集合ではなくリストに対して行わなければなりません。そこで、list() 関数を使ってこのセットをリストに変換しなければなりません。

Python で intersection() メソッドを用いてリストの交差を取得する

set クラスの intersection() メソッド は、Python で集合の交差を行うもう一つの方法です。演算子 & と同様に、これも集合に限定されます。しかし、list1 をセットに変換することで、list1 と一緒に intersection() を使用することができます。

list1 = [1, 2, 3, 4, 5]
list2 = [0, 2, 4, 6]

set1 = set(list1)
set2 = set(list2)

set3 = set(list1).intersection(list2)
list3 = list(set3)

print(list3)

出力:

[2, 4]

メソッドもまた、すべての共通要素の集合を返します。ですから、list() 関数を使ってリストに変換しなければなりません。

Python でリストの交差を取得する

上で説明した両方のメソッドは、リストではなくセットを扱うように設計されています。セットは繰り返し値を持つことができず、その要素はソートされていないことは周知の通りですが、リストに繰り返し値がある場合や、リストの順序を保持したい場合には、これらの関数はうまく動作しません。

前の 2つの方法の欠点を、このコーディング例で示します。

list1 = [1, 2, 3, 2, 4, 5]
list2 = [0, 2, 2, 4, 6]

setintersection = list(set(list1) & set(list2))
intersectionmethod = list(set(list1).intersection(list2))

print("The result of set intersection :")
print(setintersection)
print("The result of intersection() method :")
print(intersectionmethod)

出力:

The result of set intersection :
[2, 4]
The result of intersection() method :
[2, 4]

上記のように、[2, 2, 4] を正しい結果として期待していますが、[2, 4] しか得られません。

リスト内包表記は、Python でリストに対して AND 演算を行うもう一つの方法です。これは繰り返しの値を扱うことができ、上の 2つの方法では保持されていない要素の順序を保持することもできます。

# Solution 2 Using list comprehensions
list1 = [1, 2, 3, 2, 4, 5]
list2 = [0, 2, 2, 4, 6]
list3 = [x for x in list1 if x in list2]
# all the x values that are in A, if the X value is in B
print(list3)

出力:

[2, 2, 4]
Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

関連記事 - Python List