是否可以使用集合操作进行Python-Set-Comprehension?

nds*_*svw 2 python set set-comprehension

这是我的代码.

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

它回来了set([1, 2, 3, 4, 5]).

在这种情况下是否可以使用集合理解?我怎么写得更短?

cs9*_*s95 8

选项1
set.union
为什么你需要一个循环?使用set.union,它允许您一次计算两个以上集合(容器)的并集.

set.union(*[{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

我说"容器",因为第二个(和以后的)参数根本不需要设置.

set.union(*[{1,2}, [3,4], [5,1]])
# {1, 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

然而,第一个需要.或者,

set().union(*[[1,2], [3,4], [5,1]])
# {1, 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

在调用unionset对象(而不是类)时,不需要设置任何参数.


选项2
functools.reduce
如果这不符合您的口味,那么set.union也是如此.

from functools import reduce

reduce(set.union, [{1,2}, {3,4}, {5,1}])
# {1, 2, 3, 4, 5}
Run Code Online (Sandbox Code Playgroud)

这执行成对减少,累积结果.然而,不如第一种选择那么好.

  • 除了 `{1, 2}.union(*[[3,4], [5,1]])`,您还可以使用 `set().union(*[{1,2}, [3,4] ],[5,1]])`。 (2认同)

int*_*ser 5

如果你真的想要在这里有一个集合理解:

lst = [{1,2}, {3,4}, {5,1}]
{elem for set_ in lst for elem in set_}
Run Code Online (Sandbox Code Playgroud)