找到计数器列表的联合的最佳方法(在可读性和效率方面)是什么?
例如,我的列表可能如下所示:
counters = [Counter({'a': 6, 'b': 3, 'c': 1}),
Counter({'a': 2, 'b': 5}),
Counter({'a': 4, 'b': 4}),
...]
Run Code Online (Sandbox Code Playgroud)
我想计算联合,即counters[0] | counters[1] | counters[2] | ....
一种方法是这样做:
def counter_union(iterable):
return functools.reduce(operator.or_, iterable, Counter())
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
善良,Python程序员何时害怕轻松循环?大声笑.
result = Counter()
for c in counters:
result |= c
Run Code Online (Sandbox Code Playgroud)
在现实生活中确实没有奖品可以将事物压缩成理论上可能的角色.嗯,你有Perl,但不是Python ;-)
后来:根据user2357112的评论,从Python 3.3开始,上面的代码将"就地"联合进入result.也就是说,result真正重用,可能在每次迭代时变大.
在任何拼写中
counters[0] | counters[1] | counters[2] | ...
Run Code Online (Sandbox Code Playgroud)
相反,当计算下一个部分结果时,到目前为止整个部分结果都会被抛弃.这可能 - 或可能不会 - 慢得多.
| 归档时间: |
|
| 查看次数: |
864 次 |
| 最近记录: |