我希望使用Python获取一组集合的交集。
例如,我有一个返回一个列表的集合s
的函数:
[set(0,1,3), set(1,3)]
你可以看到,它们的交集是集合{1,3}。我该如何用Python获取这个交集?迄今为止,我一直在遍历列表。但我似乎无法获得交集。
解决方案应该能够处理由n个元素组成的集合列表而不仅仅是一对。
有什么想法吗?
欢迎使用推导式。
另外,为什么在其他情况下将集合呈现为set([])
,也就是说,为什么不只用大括号呢?
使用 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])
set.union
的答案加到了你的回答里。不错。 :) - Sukrit Kalra*
表示解包可迭代对象的参数,并将它们作为单独的参数传递给函数,因此 set.intersection(*lis)
等同于 set.intersection(set((0,1,3)), set((1,3)))
。 - Ashwini Chaudhary试试这个:
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])
L
没有元素时,这也会失败。 - EoghanM
{0, 1, 3}
。 - Martijn Pieters{}
是一个空字典的字面量,而不是一个空集合的字面量。 - chepner