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