列表中多个集合的并集

Union of multiple sets in a list

这是我的代码。

s = set()
for x in [ {1,2}, {3,4}, {5,1} ]:
    s |= x

它returns set([1, 2, 3, 4, 5]).

在这种情况下是否可以使用集合理解?我怎样才能把它写得更短?

set.union

set.union(*[{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}

为什么你需要循环?使用 set.union,它可以让您一次计算两个以上集合(容器)的并集。我说“容器”,因为根本不需要设置第二个(及以后的)参数。

set.union(*[{1,2}, [3,4], [5,1]])
# {1, 2, 3, 4, 5}

但是,第一个必须是。或者,

set().union(*[[1,2], [3,4], [5,1]])
# {1, 2, 3, 4, 5}

在集合对象(而不是 class)上调用 union 时,none 的参数需要是集合。


functools.reduce

from functools import reduce

reduce(set.union, [{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}

这执行成对减少,累积结果。然而,不如第一个选项好。

如果你真的想要一个集合理解:

lst = [{1,2}, {3,4}, {5,1}]
{elem for set_ in lst for elem in set_}