在Python中获取大多数列表的共同元素

J C*_*ena 4 python

给定 4 个列表,我想获取 3 个或更多列表共有的元素。

a = [1, 2, 3, 4]
b = [1, 2, 3, 4, 5]
c = [1, 3, 4, 5, 6]
d = [1, 2, 6, 7]
Run Code Online (Sandbox Code Playgroud)

因此,输出应该是[1, 2, 3, 4].

我当前的代码如下。

result1 = set(a) & set(b) & set(c)
result2 = set(b) & set(c) & set(d)
result3 = set(c) & set(d) & set(a)
result4 = set(d) & set(a) & set(b)

final_result = list(result1)+list(result2)+list(result3)+list(result4)
print(set(final_result))
Run Code Online (Sandbox Code Playgroud)

它工作正常,并给出所需的输出。但是,我有兴趣知道在 Python 中是否有一种简单的方法可以做到这一点,即:是否有任何内置函数?

Ste*_*uch 5

使用 a Counter,您可以执行以下操作:

代码:

a = [1, 2, 3, 4]
b = [1, 2, 3, 4, 5]
c = [1, 3, 4, 5, 6]
d = [1, 2, 6, 7]

from collections import Counter

counts = Counter(sum(([list(set(i)) for i in (a, b, c, d)]), []))
print(counts)

more_than_three = [i for i, c in counts.items() if c >= 3]
print(more_than_three)
Run Code Online (Sandbox Code Playgroud)

结果:

Counter({1: 4, 2: 3, 3: 3, 4: 3, 5: 2, 6: 2, 7: 1})

[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

  • @StephenRauch `Counter` 是一个 `dict` 子类,因此只能计算可哈希对象。删除“set()”仍然会导致错误。我认为如果数据包含列表,可能需要不同的方法。 (2认同)