Python:在多个列表中查找相同项
我有一个包含多个列表的列表,比如:
[[1,2,3], [3,4,5], [5,6,7], [7,8,9]]
现在我想要一个新的列表,里面包含那些出现在多个列表中的所有元素:
[3,5,7]
我该怎么做呢?
谢谢!
12 个回答
6
这段话的意思是,这个方法只会找到所有列表中都有的元素,也就是它们的交集。
set.intersection(*[set(list) for list in list_of_lists])
7
最简单的方法可能就是用 reduce 函数:
def findCommon(L):
def R(a, b, seen=set()):
a.update(b & seen)
seen.update(b)
return a
return reduce(R, map(set, L), set())
result = findCommon([[1,2,3], [3,4,5], [5,6,7], [7,8,9]])
结果是一个集合,如果你真的需要一个列表,可以直接用 list(result)
来转换一下。
16
就像你手动操作一样:
seen = set()
repeated = set()
for l in list_of_lists:
for i in set(l):
if i in seen:
repeated.add(i)
else:
seen.add(i)
顺便说一下,这里有一个一行代码(不算导入的部分),一些人一直在寻找这个(效率可能比其他方法低)
from itertools import *
reduce(set.union, (starmap(set.intersection, combinations(map(set, ll), 2))))