0

我有一个清单:

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

4

2 回答 2

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 代码。如果我理解你的问题是正确的,应该可以采用。

于 2013-05-23T20:55:19.660 回答
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]
于 2013-05-23T20:54:40.867 回答