How to create the union of many sets using a generator expression?

后端 未结 3 1318
天命终不由人
天命终不由人 2020-12-01 07:44

Suppose I have a list of sets and I want to get the union over all sets in that list. Is there any way to do this using a generator expression? In other words, how can I cre

相关标签:
3条回答
  • 2020-12-01 08:13

    Nested generator expression. But I think they are a bit cryptic, so the way KennyTM suggested may be clearer.

    frozenset(some_item for some_set in some_sets for some_item in some_set)
    
    0 讨论(0)
  • 2020-12-01 08:15

    Just use 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])
    

    This works for any iterable of iterables.

    0 讨论(0)
  • 2020-12-01 08:19

    I assume that what you're trying to avoid is the intermediate creations of frozenset objects as you're building up the union?

    Here's one way to do it. NOTE: this originally used itertools.chain() but, as Kenny's comment notes, the version below is slightly better:

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

    Invoke like this:

    a = set(['a','b','c'])
    b = set(['a','e','f'])
    c = mkunion(a,b)       # => frozenset(['a', 'c', 'b', 'e', 'f'])
    
    0 讨论(0)
提交回复
热议问题