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

mat*_*ias 5 python list

我有一个任意数量的列表列表,例如:

[[1,2,3], [3,4,5], [5,6,7], [7,8,9]]
Run Code Online (Sandbox Code Playgroud)

现在我想要一个包含多个列表中存在的所有元素的列表:

[3,5,7]
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

谢谢!

for*_*ran 12

就像你手工做的一样:

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)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这是一些人正在寻找的一个班轮(不计入进口)(应该比其他方法效率低)

from itertools import *
reduce(set.union, (starmap(set.intersection, combinations(map(set, ll), 2))))
Run Code Online (Sandbox Code Playgroud)

  • 要小心,因为'l`也需要'设置',否则你会在[[1,1],[2,2]]中得到误报 (7认同)

tru*_*ppo 6

最干净的方法可能是使用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]])
Run Code Online (Sandbox Code Playgroud)

结果是一个集合,但是list(result)如果你真的需要一个列表就行.


Win*_*mes 6

另一个简单的解决方案(一行):

 set.intersection(*[set(list) for list in list_of_lists])
Run Code Online (Sandbox Code Playgroud)