多重ループはプログラミングでよく使用される構造ですが、初心者には分かりにくいので敬遠されがちです。
一般的に、内側のループから抜け出す際にbreak
とcontinue
ステートメントを使う方法は知られていますが、外側のループから抜け出す処理は分かりにくいです。
この記事では、Pythonの多重ループにおいて「外側のループから抜け出す方法」について4つの方法と実用例を2つ解説します。
なお、ループ構造について詳しく知らないという方はこちらの記事をご覧ください。
また、多重ループにおけるbreakとcontinueの基本的な使い方についてはこちらの記事をご覧ください。
最も基本的なelseを使った方法
Pythonのループには、else
文を付け加えることができます。
通常、else
文はループが終了した後に実行されるブロックを指定するために使われますが、break
文と組み合わせることで外側のループからの抜け出すことができます。
以下は、else
文を使った外側のループから抜け出す処理の例題です。
for i in range(5):
for j in range(5):
if i == 3 and j == 3:
break
print(f'i: {i}, j: {j}')
else:
continue
break
実行すると、iが3かつjが3になった時点ですべてのループを終了しています。
※print文はbreakする前までしか実行されないため、「i: 3, j: 2」で終わっています。
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 0, j: 3
i: 0, j: 4
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 1, j: 3
i: 1, j: 4
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2
i: 2, j: 3
i: 2, j: 4
i: 3, j: 0
i: 3, j: 1
i: 3, j: 2
この例では、else
文が内側のループの後に位置しています。
else
ブロックは内側のループがbreak
文なしで完了した場合に実行されます。
そして、else
ブロックの中にcontinue
文を使って外側のループに制御を戻します。
もし内側のループがbreak
文で中断された場合、else
ブロックは実行されず、外側のループからbreak
文で抜け出します。
この方法を用いることで、break
文とcontinue
文を組み合わせて外側のループからの抜け出しをエレガントに実現できます。
その他の方法
ただし、上の方法は外側のループのみがbreak
文で抜け出す場合に有効であり、内側のループも同様にbreak
文を使って抜け出す場合には機能しません。
その場合は、次に説明するフラグ変数や関数を使った方法が適しています。
アプローチ1:フラグ変数を使用する方法
外側のループから抜け出すためには、
内側のループ内で外側のループの状態を監視するフラグ変数を導入します。
内側のループが終了した後、フラグ変数を確認して外側のループからもbreak
文を使って抜け出します。
found = False
for i in range(3):
for j in range(2):
if j == 1:
found = True
break
if found:
break
アプローチ2:関数を使用する方法
関数を定義し、外側のループをその関数内に入れ子にします。
そして、内側のループで特定の条件に達した場合に、関数からreturn
文を使って抜け出します。
これにより、外側のループ全体が終了します。
def outer_loop():
for i in range(3):
for j in range(2):
if j == 1:
return
outer_loop()
アプローチ3:外側のループをwhile文で置き換える方法
外側のループをwhile
文で表現し、内側のループでbreak
文を使って外側のループから抜け出す方法もあります。
i = 0
j = 0
while i < 3:
while j < 2:
if j == 1:
break
j += 1
i += 1
その他のアプローチのまとめ
これらのアプローチを適切に活用することで、
外側のループからの抜け出しをスムーズに実現できます。
どの方法を選択するかは、
具体的な状況やコードの複雑さによって異なる場合があります。
状況に応じて最適なアプローチを選んでください。
実用例①
これまでの説明を元に、更に具体的な例を提示します。
以下の例では、2つのリストを多重ループで組み合わせ、
特定の条件を満たす組み合わせが見つかったら外側のループを抜ける方法です。
fruits = ["apple", "banana", "orange"]
colors = ["red", "yellow", "orange"]
for fruit in fruits:
for color in colors:
if fruit == "banana" and color == "yellow":
print(f"Found a ripe banana: {color} {fruit}")
break # 外側のループを中断
else:
# 内側のループがbreakされなかった場合、外側のループの次のイテレーションに進む
continue
break # 外側のループを中断
Found a ripe banana: yellow banana
このコードでは、fruits
とcolors
という2つのリストを多重ループで組み合わせています。
その中で、”banana”と”yellow”の組み合わせが見つかったら、
「Found a ripe banana: yellow banana」と表示され、外側のループが中断されます。
また、内側のループがbreakされなかった場合はelse
ブロックが実行されて外側のループの次のイテレーションに進みますが、この例では最初の組み合わせで条件を満たすため、else
ブロックは実行されません。
実用例②
もう一つ、具体的な例を提示します。
以下の例では、2つのリストを多重ループで組み合わせて、
合計が100を超える最初の組み合わせを見つけた場合に、
外側のループを抜ける方法を示します。
list1 = [10, 20, 30, 40]
list2 = [50, 60, 70, 80]
found = False
for num1 in list1:
for num2 in list2:
if num1 + num2 > 100:
print(f"Found a combination that exceeds 100: {num1}, {num2}")
found = True
break # 外側のループを中断
if found:
break # 外側のループを中断
Found a combination that exceeds 100: 40, 60
このコードでは、list1
とlist2
という2つのリストを多重ループで組み合わせています。
それぞれの要素の合計が100を超える最初の組み合わせを見つけると、
その組み合わせを表示して外側のループを中断します。
この例では、40と60の組み合わせにおいて合計が100を超える条件を満たすため、
ループが中断されました。
まとめ
今回は、Pythonの多重ループにおいて「外側のループから抜け出す方法」について4つの方法を解説しました。
これらのテクニックをマスターすると、より効率的なプログラミングが可能になります。
初心者の方でも是非取り組んでみてください。
今後もPythonを中心としたプログラミングの情報をお届けします。
以下のメルマガにご登録頂くと、不定期に配信をお届けします。
ぜひ購読してください!
それでは、ステキなPythonライフを!
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。