Python:在多个列表中查找相同项

11 投票
12 回答
16680 浏览
提问于 2025-04-15 18:20

我有一个包含多个列表的列表,比如:

[[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))))

撰写回答