查找集合列表中所有集合中出现的元素

Finding elements that appear in all sets in a list of sets

我有一个 n 组整数的列表,表示为 lst = [S1, S2, S3 ... Sn],我想找到所有组的交集。

是否有最佳方法?

编辑: 误读,认为您有多个数字列表,并且通常询问如何找到所有列表中都存在的数字。不过,将保留下面的原始答案,因为有些人仍然觉得它在某种程度上有帮助。


是的,它叫做集合交集,可以在集合数据类型上使用。

演示:

>>> s = set((1, 2, 3))
>>> s2 = set((2, 3, 4))
>>> s3 = set((3, 4, 5))
>>> s & s2
{2, 3}
>>> s & s2 & s3
{3}

如果您当前的数据存储在列表中,将其转换为集合只需将列表传递给 set() 构造函数即可:

>>> numbers = [2, 7, 9, 10]
>>> set(numbers)
{2, 7, 9, 10}

但请注意,如果列表包含重复项,则该信息将会丢失,并且每个重复的元素在结果交集中只会出现一次。

如果你有一个 list 集,你可以很容易地得到它们的交集:

set.intersection(*lst)

这将生成一个新集合,其中仅包含所有集合之间共有的值:

>>> lst = [{1, 2, 3}, {3, 5}, {2, 3}]
>>> set.intersection(*lst)
{3}