Edited at

多重ループを一気に抜ける

More than 5 years have passed since last update.

pythonには多重ループを抜ける簡単な方法が用意されてない。

フラグを用意すればいいけどあんまりきれいじゃない

flag = False

for i in range(100):
for j in range(100):
if i > j > 70:
flag = True
break
print i, j
if flag:
break

そんなforループは構造から見直せってことなのだと思うけど。どうしてもbreakで多重ループを抜けてほしいときがある。

そんな時は


  • for-else句を使う

  • try-except構文を使う

  • gotoモジュールを使う
    とかがあるっぽい。


for-else句を使う

for i in range(100):

for j in range(100):
if i > j > 70:
break
print i, j
else:
continue
break

あんまきれいじゃない


try-except構文を使う

try:

for i in range(100):
for j in range(100):
if i > j > 70:
raise Exception
print i, j
except Exception:
pass

本来の使い方と違うしあんま好きになれないな~


gotoをつかう

goto for Python

from goto import goto, label

for i in range(100):
for j in range(100):
if i > j > 70:
goto .END
print i, j
label .END

わかりやすいけど外部モジュールのインストールが必要

どれもいまいちだしやっぱ関数化しろってことですね。

はい。