如何使用生成器表达式创建多个集合的并集?
假设我有一个包含多个集合的列表,我想把这些集合合并成一个大集合。有没有办法用生成器表达式来做到这一点?换句话说,我怎么能直接把这个列表里的所有集合合并成一个 frozenset
呢?
3 个回答
4
嵌套的生成器表达式。不过我觉得它们有点难懂,所以KennyTM建议的方法可能更清晰。
frozenset(some_item for some_set in some_sets for some_item in some_set)
6
我猜你想要避免在合并集合的时候,产生中间的 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'])
70
只需使用这个.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])
这个方法适用于任何可以迭代的集合。