python 将一组 fronzensets 合并为一组

python merge set of fronzensets into one set

我正在尝试合并集合中定义的集合,这就是我现在所拥有的

a = frozenset([1,3,4])
b = frozenset([1,2,3,4,5])
s = set()
s.add(a)
s.add(b)
merged = set(itertools.chain.from_iterable(s))

实际上,s 可能包含许多冻结集。有更好的方法吗?感觉像是 reduce 个案例,但是

from functools import reduce
merged = reduce(|, s)

不起作用。

还有

merged = reduce(set.add, s)

不起作用,因为 s 的元素是冻结集。

可以使用reduce,只需使用适当的函数:

>>> from functools import reduce
>>> frozenset.union
<method 'union' of 'frozenset' objects>
>>> reduce(frozenset.union, [a,b])
frozenset({1, 2, 3, 4, 5})
>>>

您使用 | 的方法是正确的,但是 | 是 Python 中的运算符,不能替代函数。但是当你想这样做时,导入运算符!

>>> import operator
>>> reduce(operator.or_, [a,b])
frozenset({1, 2, 3, 4, 5})

如果您有两个以上的 frozenset,请创建它们的容器(例如,列表)并应用联合:

listoffrozensets = [a,b,...]
frozenset().union(*listoffrozensets)