Python 中的列表交集

Muhammad Maisam Abbas 2023年1月30日 2021年2月7日
  1. 在 Python 中使用&運算子獲取列表交集
  2. 在 Python 中用 intersection() 方法獲取列表交集
Python 中的列表交集

在本教程中,我們將討論在 Python 中獲取兩個列表之間交集的幾種方法。

交集(或 AND)基本上是專門為集合設計的一種操作。它的工作原理是選擇兩個集合中的共同元素。舉個例子。

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

print(setA & setB)

輸出:

{2, 4}

在上面的例子中,setAsetB 是兩個集合,&運算子對這些集合執行交集運算。

預設情況下,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]

intersection() 方法也返回一個包含所有公共元素的集合。因此,我們必須使用 list() 函式將其轉換為一個列表。

在 Python 中用列表推導式獲取列表交集的方法

上面討論的這兩種方法都是針對集合而不是列表而設計的。我們都知道,集合不能有重複的值,而且它的元素是不排序的,如果我們的列表中有重複的值,或者我們想保留列表中的順序,這些函式就不能很好地工作。

前面兩種方法的弊端在這個編碼例子中得到了體現。

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 操作的另一種方式。它可以處理重複出現的值,也可以保留元素的順序,而上面兩種方法沒有保留。

#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