假设我有一组集合,我想要获取该列表中所有集合的并集。是否有办法使用生成器表达式来直接创建这个并集,以 frozenset
的形式呈现?
只需使用.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])
这适用于任何可迭代的可迭代对象。
我猜您想要避免在构建并集时产生frozenset对象的中间创建过程?
这里有一种方法。 注意:原来使用了itertools.chain()
,但是如Kenny的评论所述,下面的版本稍微好一些:
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'])
.chain(*args)
,请使用chain.from_iterable
。 - kennytmfrozenset(some_item for some_set in some_sets for some_item in some_set)