有效地增加列表

时间:2013-05-23 20:43:37

标签: arrays performance increment

我有一个清单:

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“长度范围内进行此操作,并且这样做数百万次。因此,我的循环会给计算时间带来相当大的问题(我相信)。有没有办法将给定值添加到给定范围内的所有索引,而不必循环遍历给定的索引?

2 个答案:

答案 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]