我希望python获取集合列表的交集。
例如,我有一个函数返回s
以下集合列表:
[set(0,1,3), set(1,3)]
正如您所看到的,这是集{1,3}的交集。我怎样才能让python获得交集?到目前为止我一直在做的是迭代列表。但我无法看到这个交叉点。
解决方案应该能够处理n个元素列表而不仅仅是一对。
有什么想法吗?
欢迎理解
顺便说一下,为什么这个集合呈现为set([])
,换句话说为什么不只是用花括号?
答案 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])