nos*_*nos 4 python set set-union
我正在尝试合并集合中定义的集合,这就是我现在拥有的
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))
Run Code Online (Sandbox Code Playgroud)
实际上,s可能包含许多冻结集。有更好的方法吗?感觉像reduce情况,但是
from functools import reduce
merged = reduce(|, s)
Run Code Online (Sandbox Code Playgroud)
不起作用。
也
merged = reduce(set.add, s)
Run Code Online (Sandbox Code Playgroud)
不起作用,因为其中的元素s是Frozensets。
您可以使用reduce,只需使用适当的功能即可:
>>> from functools import reduce
>>> frozenset.union
<method 'union' of 'frozenset' objects>
>>> reduce(frozenset.union, [a,b])
frozenset({1, 2, 3, 4, 5})
>>>
Run Code Online (Sandbox Code Playgroud)
您在使用时处在正确的位置|,但是|在Python中是一个运算符,并且不能代替函数。但是,当您要这样做时,请导入运算符!
>>> import operator
>>> reduce(operator.or_, [a,b])
frozenset({1, 2, 3, 4, 5})
Run Code Online (Sandbox Code Playgroud)
如果您有两个以上的冻结集,请为其创建一个容器(例如,列表)并应用并集:
listoffrozensets = [a,b,...]
frozenset().union(*listoffrozensets)
Run Code Online (Sandbox Code Playgroud)