ループ処理
ループ処理について。
for | イテレータ(シーケンスなど)を添える |
---|---|
while | イテレータの代わりに条件式。while True, while 1という形をよく見る |
break | ブロックから抜ける |
continue | それ以降のループブロックを実行せず、最初に戻る |
else | forブロックやwhileブロックで使う時は、ループの実行後の処理。ただし、breakすると無視 |
x = 0 while x < 10: x +=1 print(x, end=" ") else: print("finished") # 1 2 3 4 5 6 7 8 9 10 finished x = 0 while x < 10: x +=1 print(x, end=" ") if x == 5: break else: print("finished") print("ended") # 1 2 3 4 5 ended x = 0 while x < 10: x +=1 if x % 2 == 0: continue print(x, end=" ") else: print("finished") # 1 3 5 7 9 finished
・反復中のリスト自身を改変したいときは、スライスをループ要素とする。
nlist = list(range(6)) for i in nlist[:]: if i % 2 == 0: nlist.append(i) print(nlist) # [0, 1, 2, 3, 4, 5, 0, 2, 4]
ネストしたループから一気に抜けるには
・フラグ管理
・エラーをraiseして、try/catch
・関数化など。
def break_test(escape): counter = 0 for i in range(10): for j in range(10): counter += 1 print(counter, end=" ") if i * j == escape: print("i={}, j={}".format(i,j)) return break_test(8) # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 i=1, j=8
enumerate()
ループカウンタとして使える。
回数や条件を判断してループを抜けられる。
zip()
2つのシーケンスを使ったループが作れる。
for i, j in zip(["A", "B", "C"], [1, 2, 3]): print(i, j) # A 1 # B 2 # C 3