获得集合列表的交集

时间:2013-07-05 18:54:12

标签: python list set

我希望python获取集合列表的交集。

例如,我有一个函数返回s以下集合列表:

[set(0,1,3), set(1,3)]

正如您所看到的,这是集{1,3}的交集。我怎样才能让python获得交集?到目前为止我一直在做的是迭代列表。但我无法看到这个交叉点。

解决方案应该能够处理n个元素列表而不仅仅是一对。

有什么想法吗?

欢迎理解

顺便说一下,为什么这个集合呈现为set([]),换句话说为什么不只是用花括号?

2 个答案:

答案 0 :(得分:25)

使用set.intersection

>>> lis = [set((0,1,3)), set((1,3))]
>>> set.intersection(*lis)
set([1, 3])

联盟使用set.union

>>> set.union(*lis)
set([0, 1, 3])

如果performance很重要,请使用此:

>>> from itertools import islice
>>> set.intersection(set(lis[0]), *islice(lis, 1, None))
set([1, 3])

答案 1 :(得分:2)

试试这个:

reduce(set.intersection, L)

In [83]: L = [set([0,1,3]), set([1,3])]

In [84]: reduce(set.intersection, L)
Out[84]: set([1, 3])