查找列表并集的最佳方法是什么(就可读性和效率而言)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())
有更好的方法吗?
天哪,Python 程序员什么时候开始害怕简单的循环了?哈哈。
result = Counter()
for c in counters:
result |= c
在现实生活中,将事物压缩到理论上尽可能少的角色中确实没有任何奖励。嗯,是的,Perl 有,但 Python 没有;-)
后来:根据 user2357112 的评论,从 Python 3.3 开始,上面的代码将“就地”并入result
。那是,result
真正被重用,可能在每次迭代中变得更大。
以任何拼写形式
counters[0] | counters[1] | counters[2] | ...
相反,当计算下一个部分结果时,到目前为止的整个部分结果都会被丢弃。这可能会慢很多,也可能不会慢很多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)