增加字典中存储的计数器的最快方法是什么?增加字典中计数器的最快方法
因为我必须这样做同样的操作几百次几千,我正在寻找的东西比我有什么下面更高效:
def funcA(a):
keys = [x for x in range(1, 51)]
adict = {key: 0 for key in keys}
for k in adict.keys(): # this is the code I would like to improve
if k <= a:
adict[k] += 1
else:
break
import timeit
number = 100000
t1 = timeit.timeit(
'funcA(5)',
setup="from __main__ import funcA", number=number)
print(t1)
>>> 0.42629639082588255
试图用一个列表理解,而不是似乎将放缓所有的一切,也许是因为它缺少break
声明?
def funcB(a):
# not working, invalid syntax
keys = [x for x in range(1, 51)]
adict = {key: 0 for key in keys}
def _inc(x):
x += 1
return x
[_inc(adict[k]) for k in adict.keys() if k <= a]
# Timing: 0.5831785711925477
注:最初我有if float(k) <= float(a):
但因为我只希望号(整数或浮点数),去除float()
转换提高了代码。这个假设是否合理?
注2:在一些评论所指出的,break
语句可以产生意外的结果所产生的字典,所以不如只是做:
def funcA(a):
keys = [x for x in range(1, 51)]
adict = {key: 0 for key in keys}
for k in adict:
if k <= a:
adict[k] += 1
# Timing: 0.5132114209700376
为什么不这样做:'adict = {key:1如果key <= a else 0 for keys in keys}',那么可以将adict.keys()中的k缩短为'for for k in adict' –
? –
@AshwiniChaudhary我想增加关键词'adict [k] + = 1' – PedroA