假设我有一个集合列表,我想在该列表中的所有集合上获得联合。有没有办法使用生成器表达式?换句话说,如何将该列表中的所有集合直接创建为frozenset
?
答案 0 :(得分:51)
只需使用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])
这适用于任何可迭代的迭代。
答案 1 :(得分:6)
我认为你正在努力避免的是你正在建立联盟时冷冻集对象的中间创造?
这是一种方法。 注意:最初使用的是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'])
答案 2 :(得分:4)
嵌套的生成器表达式。但我认为它们有点神秘,所以KennyTM建议的方式可能更清楚。
frozenset(some_item for some_set in some_sets for some_item in some_set)