【Python】2重ループや多重ループをbreakで抜ける方法

【Python】2重ループや多重ループをbreakで抜ける方法

公開: 更新:



Pythonの2重ループでbreakを使う方法

Pythonで2重ループを実行する際、内側のループだけを中断したい場合があります。この場合、単純に`break`を使用すると内側のループのみが終了し、外側のループは継続して実行されます。特定の条件が満たされた時点で内側の処理を中断しながらも、外側のループでは残りの要素を処理できます。

for i in range(3):
    print(f"外側ループ: i = {i}")
    for j in range(5):
        print(f"  内側ループ: j = {j}")
        if j == 2:
            print("  内側ループをbreakします")
            break
    print("外側ループは継続します")
【実行結果】
外側ループ: i = 0
  内側ループ: j = 0
  内側ループ: j = 1
  内側ループ: j = 2
  内側ループをbreakします
外側ループは継続します
外側ループ: i = 1
  内側ループ: j = 0
  内側ループ: j = 1
  内側ループ: j = 2
  内側ループをbreakします
外側ループは継続します
外側ループ: i = 2
  内側ループ: j = 0
  内側ループ: j = 1
  内側ループ: j = 2
  内側ループをbreakします
外側ループは継続します
行番号 詳細説明
1行目 range(3)で0から2までの値でループを実行
2行目 現在の外側ループのインデックスを表示
3行目 内側のループをrange(5)で0から4までの値で実行
4行目 現在の内側ループのインデックスを表示
5行目 jの値が2の場合に条件分岐
6行目 内側ループを中断することを示すメッセージを表示
7行目 内側ループからbreakで脱出
8行目 外側ループが継続していることを示すメッセージを表示

`break`文は最も内側のループ(現在実行中のループ)にのみ影響します。上記の例では`j == 2`の条件が満たされると内側のループが終了しますが、外側のループは通常通り`i`の値を増やして次の繰り返しに進みます。

【PR】『Python』を学べる企業・個人向けのプログラミングコース

外側の2重ループをbreakする方法

外側のループも含めて2重ループを完全に抜け出したい場合は、フラグ変数を使用するアプローチが効果的です。フラグ変数を設定して内側のループで特定条件が満たされた場合にフラグを変更し、外側のループでそのフラグをチェックすることによって2重ループ全体を終了できます。

found = False  # フラグ変数
for i in range(3):
    print(f"外側ループ: i = {i}")
    for j in range(5):
        print(f"  内側ループ: j = {j}")
        if i == 1 and j == 2:
            print("  目的の値が見つかりました")
            found = True  # フラグをTrueに設定
            break  # 内側のループを抜ける
    if found:
        print("外側のループも抜けます")
        break  # 外側のループを抜ける
    print("外側ループは継続します")
【実行結果】
外側ループ: i = 0
  内側ループ: j = 0
  内側ループ: j = 1
  内側ループ: j = 2
  内側ループ: j = 3
  内側ループ: j = 4
外側ループは継続します
外側ループ: i = 1
  内側ループ: j = 0
  内側ループ: j = 1
  内側ループ: j = 2
  目的の値が見つかりました
外側のループも抜けます
行番号 詳細説明
1行目 フラグ変数foundをFalseで初期化
2行目 range(3)で0から2までの値でループを実行
3行目 現在の外側ループのインデックスを表示
4行目 内側のループをrange(5)で0から4までの値で実行
5行目 現在の内側ループのインデックスを表示
6行目 iが1かつjが2の場合に条件分岐
7行目 条件満足時のメッセージを表示
8行目 フラグ変数をTrueに変更
9行目 内側ループからbreakで脱出
10行目 フラグ変数がTrueの場合に条件分岐
11行目 外側ループを抜けることを示すメッセージを表示
12行目 外側ループからbreakで脱出
13行目 フラグがFalseの場合に外側ループが継続することを示すメッセージを表示

フラグ変数を使った方法では、まず`found`などのブール変数を`False`で初期化してから、内側のループで条件が満たされた時点で`True`に変更します。その後、内側のループを`break`で抜けた直後に外側のループでフラグ変数をチェックし、条件に応じて外側のループも`break`します。

多重ループからbreakで脱出する方法

Pythonでは関数を使用することによって、3重以上の複雑な多重ループからも簡単に脱出できます。関数内で必要な条件が満たされた場合に`return`文を使用すると、すべてのループをただちに終了できるためコードの可読性が向上します。

def search_matrix():
    for i in range(3):
        print(f"外側ループ: i = {i}")
        for j in range(3):
            print(f"  中間ループ: j = {j}")
            for k in range(3):
                print(f"    内側ループ: k = {k}")
                if i == 1 and j == 1 and k == 1:
                    print("    目的の値が見つかりました")
                    return "検索成功"  # すべてのループから脱出
    return "検索失敗"  # 見つからなかった場合
result = search_matrix()
print(f"結果: {result}")
【実行結果】
外側ループ: i = 0
  中間ループ: j = 0
    内側ループ: k = 0
    内側ループ: k = 1
    内側ループ: k = 2
  中間ループ: j = 1
    内側ループ: k = 0
    内側ループ: k = 1
    内側ループ: k = 2
  中間ループ: j = 2
    内側ループ: k = 0
    内側ループ: k = 1
    内側ループ: k = 2
外側ループ: i = 1
  中間ループ: j = 0
    内側ループ: k = 0
    内側ループ: k = 1
    内側ループ: k = 2
  中間ループ: j = 1
    内側ループ: k = 0
    内側ループ: k = 1
    目的の値が見つかりました
結果: 検索成功
行番号 詳細説明
1行目 search_matrix関数を定義
2行目 外側のループをrange(3)で0から2までの値で実行
3行目 現在の外側ループのインデックスを表示
4行目 中間のループをrange(3)で0から2までの値で実行
5行目 現在の中間ループのインデックスを表示
6行目 内側のループをrange(3)で0から2までの値で実行
7行目 現在の内側ループのインデックスを表示
8行目 i=1、j=1、k=1の場合に条件分岐
9行目 条件満足時のメッセージを表示
10行目 「検索成功」を返してすべてのループから脱出
11行目 条件を満たさずループが完了した場合に「検索失敗」を返す
12行目 search_matrix関数を呼び出して結果をresultに格納
13行目 関数の結果を表示

関数を使用した方法の大きな利点は、`return`文によってどの深さのループからでも即座に脱出できることです。上記の例では3重ループを使用していますが、条件`i == 1 and j == 1 and k == 1`が満たされた時点で`return`文が実行され、すべてのループ処理が終了します。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する