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 create the union over all sets in that list directly as a frozenset
?
The most efficient way to join multiple sets (stored in a list of sets), use the Python one-liner set(). union(*list) that creates a new set object, calls the union() method on the new object, and unpacks all sets from the list of sets into the union() method's argument list.
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.
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'])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With