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