我有一个集合列表l
。要取出l
中所有集合的并集,我可以这样做:
union = set()
for x in l:
union |= x
我有一种感觉,写这个可能有更经济/实用的方法。我能否改进它?
我有一个集合列表l
。要取出l
中所有集合的并集,我可以这样做:
union = set()
for x in l:
union |= x
我有一种感觉,写这个可能有更经济/实用的方法。我能否改进它?
以下是我会如何做(根据评论进行了一些更正):
union_set = set()
union_set.update(*l)
或者union_set = set.union(*l)
>>> l = [set([1, 2, 3]), set([3, 4, 5]), set([0, 1])]
>>> set.union(*l)
set([0, 1, 2, 3, 4, 5])
reduce()
几乎是最传统的方法之一:>>> reduce(set.union, [ set([1,2]), set([3,4]), set([5,6]) ])
set([1, 2, 3, 4, 5, 6])
reduce
可以在functools模块中找到;在2.6和2.7中,它既存在于functools
中,也存在于(与旧版本解释器相同的)内置中。union = reduce(set.union, l)
reduce
是内置函数。在3.x中,它在functools
模块中。
union_set.union(l[0], l[1], l[2],...)
一样。 - Justin Peelunion
返回一个新的集合,而update
则会修改当前的集合。我已经更新了我的回答。有点有趣的是,居然要等到现在才有人正确指出这一点。 - Justin Peel