如何使用生成器表达式创建多个集合的并集?

Bjö*_*lex 29 python generator set

假设我有一个集合列表,我想获得该列表中所有集合的联合.有没有办法使用生成器表达式?换句话说,我怎么可以创建在所有集合的并集在该列表中直接作为frozenset

ken*_*ytm 53

只需使用.union()方法.

>>> l = [set([1,2,3]), set([4,5,6]), set([1,4,9])]
>>> frozenset().union(*l)
frozenset([1, 2, 3, 4, 5, 6, 9])
Run Code Online (Sandbox Code Playgroud)

这适用于任何可迭代的迭代.

  • 只是指出,如果`l`包含`frozenset.s,例如`frozenset.union(* l)`,将`frozenset.union'作为未绑定方法会更干净。与`set.union`相同。 (2认同)

Owe*_* S. 6

我假设你正在努力避免的是你正在建立联盟时冷冻集对象的中间创造?

这是一种方法.注意:这最初使用itertools.chain()但是,正如Kenny的评论说明,下面的版本稍微好一点:

import itertools

def mkunion(*args):
    return frozenset(itertools.chain.from_iterable(args))
Run Code Online (Sandbox Code Playgroud)

像这样调用:

a = set(['a','b','c'])
b = set(['a','e','f'])
c = mkunion(a,b)       # => frozenset(['a', 'c', 'b', 'e', 'f'])
Run Code Online (Sandbox Code Playgroud)

  • 我的性能测试结果(使用 python 3):KennyTM 的响应在集数 < 10000 时略快,但在 30000 集时响应略快 (2认同)