Python 中的列表交集
在本教程中,我們將討論在 Python 中獲取兩個列表之間交集的幾種方法。
交集(或 AND)基本上是專門為集合設計的一種操作。它的工作原理是選擇兩個集合中的共同元素。舉個例子。
setA = {1, 2, 3, 4, 5}
setB = {0, 2, 4, 6}
print(setA & setB)
輸出:
{2, 4}
在上面的例子中,setA
和 setB
是兩個集合,&
運算子對這些集合執行交集運算。
預設情況下,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]
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