代码之家  ›  专栏  ›  技术社区  ›  Björn Pollex

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

  •  28
  • Björn Pollex  · 技术社区  · 15 年前

    假设我有一个集合列表,我想让联合覆盖该列表中的所有集合。使用生成器表达式有什么方法可以做到这一点吗?换句话说,如何在该列表中的所有集合上创建联合 直接地 作为一个 frozenset ?

    3 回复  |  直到 7 年前
        1
  •  49
  •   OrangeDog    7 年前

    只使用 the .union() method .

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

    这适用于任何一个无法理解的人。

        2
  •  6
  •   Owen S.    15 年前

    我假设你试图避免的是在你建立联盟的过程中,frozenset对象的中间产物?

    这是一种方法。 注: 这是最初使用的 itertools.chain() 但是,正如肯尼的评论所指出的,下面的版本稍微好一点:

    import itertools
    
    def mkunion(*args):
        return frozenset(itertools.chain.from_iterable(args))
    

    这样调用:

    a = set(['a','b','c'])
    b = set(['a','e','f'])
    c = mkunion(a,b)       # => frozenset(['a', 'c', 'b', 'e', 'f'])
    
        3
  •  4
  •   user395760    15 年前

    嵌套生成器表达式。但我认为它们有点神秘,所以肯尼特的建议可能更清晰。

    frozenset(some_item for some_set in some_sets for some_item in some_set)