15

我希望 python 得到集合列表的交集。

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

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

如您所见,它的交集是集合 {1,3}。如何让 python 获得交集?到目前为止,我一直在做的是遍历列表。但我看不到十字路口。

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

有任何想法吗?

欢迎理解

顺便说一句,为什么要渲染集合set([]),换句话说,为什么不只使用花括号?

4

2 回答 2

31

使用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])

如果性能很重要,那么使用这个:

>>> from itertools import islice
>>> set.intersection(set(lis[0]), *islice(lis, 1, None))
set([1, 3])
于 2013-07-05T18:55:31.390 回答
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])
于 2013-07-05T19:02:03.330 回答