8

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

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可能包含许多frozensets。有更好的方法吗?感觉像个reduce案子,但是

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

不起作用。

merged = reduce(set.add, s)

不起作用,因为 的元素s是frozensets。

4

2 回答 2

10

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

listoffrozensets = [a,b,...]
frozenset().union(*listoffrozensets)
于 2017-02-09T20:22:59.127 回答
7

可以使用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})
于 2017-02-09T20:20:45.963 回答