かゆい所に手が届く解説

Pythonの多重ループで外側のループから抜け出す4つの方法+実用例

Pythonの多重ループで外側のループから抜け出す4つの方法

多重ループはプログラミングでよく使用される構造ですが、初心者には分かりにくいので敬遠されがちです。

一般的に、内側のループから抜け出す際にbreakcontinueステートメントを使う方法は知られていますが、外側のループから抜け出す処理は分かりにくいです。

この記事では、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

このコードでは、fruitscolorsという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

このコードでは、list1list2という2つのリストを多重ループで組み合わせています。

それぞれの要素の合計が100を超える最初の組み合わせを見つけると、

その組み合わせを表示して外側のループを中断します。

この例では、40と60の組み合わせにおいて合計が100を超える条件を満たすため、

ループが中断されました。

まとめ

今回は、Pythonの多重ループにおいて「外側のループから抜け出す方法」について4つの方法を解説しました。

これらのテクニックをマスターすると、より効率的なプログラミングが可能になります。

初心者の方でも是非取り組んでみてください。

今後もPythonを中心としたプログラミングの情報をお届けします。

Pythonの演習はこちら ▶

以下のメルマガにご登録頂くと、不定期に配信をお届けします。

ぜひ購読してください!

それでは、ステキなPythonライフを!

Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 最近ではPythonを用いたアプリ開発、ウェブアプリケーションの開発と運営に没頭。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です