2017-02-26 107 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]