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)
我正在尝试合并集合中定义的集合,这就是我现在所拥有的
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)