2017-02-20 63 views
0

我正在尋找下面的代碼的快速實現;使用,例如,地圖()或next():查找列表中索引的起始和大於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

您也可以使用itertools.accumulate()enumerate()next()在一起:

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