2017-02-26 108 views
1

我想通過list1循環,並追加一個增加值到列表2,直到它達到列表1中的值,其中value != 0然後增加值重置爲0並開始從0再次枚舉。蟒蛇重置枚舉條件列表

我試過如下:

list1 = [0,0,0,25,0,0,0,20,0,0] 
list2 = [] 

for i,v in enumerate(list1): 
    if v == 0: 
     list2.append(i+1) 
    else: 
     list2.append(0) 

但這返回:

list2 = [1,2,3,0,5,6,7,0,9,10] 

所需的輸出:

list2 = [1,2,3,0,1,2,3,0,1,2] 

回答

1

forenumerate(..)問題是for不關心設置變量,如i在循環:如果一個新的迭代開始,然後i從迭代器獲取該輸入for。所以即使你設置了i,它也不會影響下一次迭代。

訣竅是由此定義i圈外和自行更新它(增加它,或者如果v != 0復位):

list1 = [0,0,0,25,0,0,0,20,0,0] 
list2 = [] 

i = 0 
for v in list1: 
    i += 1 
    if v != 0: 
     i = 0 
    list2.append(i)
1

而是列舉的,你可以設置一個蓄壓器可以被複位如果list1中的值爲零不等於零:

list2 = [] 

acc = 0 
for v in list1: 
    if v != 0: 
     list2.append(0) 
     acc = 0 
    else: 
     acc += 1 
     list2.append(acc) 

list2 
# [1, 2, 3, 0, 1, 2, 3, 0, 1, 2]