python将fronzensets集合并为一组

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。

jua*_*aga 5

可以使用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)


DYZ*_*DYZ 5

如果您有两个以上的冻结集,请为其创建一个容器(例如,列表)并应用并集:

listoffrozensets = [a,b,...]
frozenset().union(*listoffrozensets)
Run Code Online (Sandbox Code Playgroud)

  • 确实并没有什么不同,但是只在类中直接使用方法*而不实例化无用的实例:`frozenset.union`。 (2认同)