2017-02-26 6 views
1

list1をループして、リスト2の値に達するまでリスト2の値を増やしたい場合は、の値が0にリセットされ、再び0に列挙されます。python reset条件のリストのインデックスを列挙します

私は次のことを試してみました:

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ような変数を設定することを気にしないということですforにフィードします。したがって、iを設定しても、次の反復は無効になります。

トリック(それをインクリメント、またはv != 0場合、それをリセットする)ループのうちiを定義し、それを自分で更新することである。

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の値が0の場合はゼロに設定します。ゼロに等しくない:新しい反復が開始された場合は、iがフェッチされ、イテレータからのこと:

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] 
関連する問題