我有一个清单:
foo = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
目前,我按给定值增加已知数量的连续索引:
def increment(index, length, some_value, a_list):
for i in range(index, index+length):
a_list[i] += some_value
return a_list
foo = increment(2,3,4,foo)
# [0, 0, 4, 4, 4, 0, 0, 0, 0, 0]
然而,问题是我会在50-100“长度范围内进行此操作,并且这样做数百万次。因此,我的循环会给计算时间带来相当大的问题(我相信)。有没有办法将给定值添加到给定范围内的所有索引,而不必循环遍历给定的索引?
答案 0 :(得分:1)
Simon Tatham写了一些关于“累积频率表”的文章:http://www.chiark.greenend.org.uk/~sgtatham/algorithms/cumulative.html 这显然可以让你记录日志时间:
def increment(index, length, some_value, a_frequency_table):
// increment "frequency" of (index) by some_value
// decrement "frequency" of (index+length-1) by some_value
他还链接页面底部的C代码。如果我理解你的问题,应该可以采用。
答案 1 :(得分:0)
根据您的要求,我认为您在性能方面做得恰到好处。我唯一可以看到提高性能的是非常微小的...我不打算返回数组,因为它是不必要的。除此之外,一切看起来都很合理。
def increment(index, length, some_value, a_list):
for i in range(index, index+length):
a_list[i] += some_value
increment(2,3,4,foo)
# [0, 0, 4, 4, 4, 0, 0, 0, 0, 0]