【发布时间】:2013-09-17 01:25:54
【问题描述】:
找到Counters 列表的并集的最佳方法是什么(就可读性和效率而言)?
例如,我的列表可能如下所示:
counters = [Counter({'a': 6, 'b': 3, 'c': 1}),
Counter({'a': 2, 'b': 5}),
Counter({'a': 4, 'b': 4}),
...]
我要计算并集,即counters[0] | counters[1] | counters[2] | ...。
一种方法是这样的:
def counter_union(iterable):
return functools.reduce(operator.or_, iterable, Counter())
有更好的方法吗?
【问题讨论】:
-
我认为你的方法非常好。
-
如果您有很多计数器,您可能需要使用
|=的解决方案。 -
@arshajii:嗯,我在想它会是就地的,避免了潜在的二次复制时间,但它看起来不像 Counter 实际上就地实现任何运算符的版本。
-
这取决于 Python 版本:从 Python 3.3 开始为 Counters 实现了就地多重方法。