2017-02-20 8 views
0

次のコードの高速実装を探しています。例えば、使用して、マップ()または次の():インデックスのリストの開始の合計がXより大きいリスト内のアイテムのインデックスを見つける

l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

total_so_far = 0 
for i in l: 
    total_so_far += i 
    if total_so_far > 14: 
     break 

print(i) 

コードは、インデックスにリストの先頭の合計が大きく超える14

注意されたリスト内のアイテムのインデックスを印刷します。私は、別のループでリンクを継続的に更新する必要があります。したがって、リストをインプレースで更新することはできないため、numpyの解はおそらく遅すぎるでしょう。

+1

あなたは 'map'または' next'が速くなると思いますか?関数型プログラミングはそのような累積アルゴリズムには適応していません。 –

答えて

0

またenumerate()next()と一緒itertools.accumulate()を利用することができます:

In [1]: from itertools import takewhile 

In [2]: l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

In [3]: next(index for index, value in enumerate(accumulate(l)) if value > 14) 
Out[3]: 5 
関連する問題