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 は「Cumulative Frequency Tables」について何か書いてい ます: 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 に答える