取集合的并集

5

我有一个集合列表l。要取出l中所有集合的并集,我可以这样做:

union = set()
for x in l:
   union |= x

我有一种感觉,写这个可能有更经济/实用的方法。我能否改进它?

4个回答

10

以下是我会如何做(根据评论进行了一些更正):

union_set = set()
union_set.update(*l)
或者
union_set = set.union(*l)

2
它将列表扩展为一堆传递给函数或方法的参数。例如,就像执行union_set.union(l[0], l[1], l[2],...)一样。 - Justin Peel
1
@Randomblue 请见http://docs.python.org/tutorial/controlflow.html#arbitrary-argument-lists - Charles Duffy
你是指“update”(改变)还是“union”(返回新集合)? - Reinstate Monica
@WolframH,没错,你说得很对。 union 返回一个新的集合,而 update 则会修改当前的集合。我已经更新了我的回答。有点有趣的是,居然要等到现在才有人正确指出这一点。 - Justin Peel

5
>>> l = [set([1, 2, 3]), set([3, 4, 5]), set([0, 1])]
>>> set.union(*l)
set([0, 1, 2, 3, 4, 5])

然而,@JustinPeel的语法更加简洁。 - Praveen Gollakota

4
如果你正在寻找一种功能性方法,那么reduce()几乎是最传统的方法之一:
>>> reduce(set.union, [ set([1,2]), set([3,4]), set([5,6]) ])
set([1, 2, 3, 4, 5, 6])

在Python 3.0中,reduce可以在functools模块中找到;在2.6和2.7中,它既存在于functools中,也存在于(与旧版本解释器相同的)内置中。

3
union = reduce(set.union, l)

在Python 2.x中,reduce是内置函数。在3.x中,它在functools模块中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接