itertools.groupby を使うと直感的に書けます。
python
1from itertools import groupby
2
3lst = [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]
4N = 3 # 「N 個以上連続していたら」という条件の値
5
6i = 0
7for k, g in groupby(lst):
8 g = list(g) # list に変換
9
10 if g[0] == 1 and len(g) >= N:
11 # 1がN 個連続して並んでいる場合、最初のインデックスを出力して終了する。
12 print(i)
13 break
14
15 i += len(g)
itertools.groupby の使い方
python
1from itertools import groupby
2lst = [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]
3
4for k, g in groupby(lst):
5 print(k, list(g))
6# 0 [0, 0, 0, 0]
7# 1 [1]
8# 0 [0, 0, 0]
9# 1 [1, 1, 1, 1, 1]
10# 0 [0, 0, 0, 0]
自前で書く場合
python
1lst = [0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]
2N = 3
3
4curr_value = lst[0]
5cnt = 0
6for i, value in enumerate(lst):
7 if value == curr_value:
8 # 前回と同じ値ならカウント +1
9 cnt += 1
10 else:
11 # 前回と異なる値ならカウントを0にする。
12 cnt = 0
13 curr_value = value
14
15 if cnt == N and value == 1:
16 # N個連続 かつ 値が1の場合ループ終了
17 print(i - N)
18 break