Python | 実務でありがちな「ネスト脱出テク」解説(フラグ/関数化)

Python Python
スポンサーリンク

プログラミング初心者がよくつまずくのが「ネストが深くなってしまう」問題です。
例えば、for の中に if があり、その中にさらに for があり…と繰り返すと、コードが読みにくくなります。
実務では「ネストを脱出する」ために フラグ関数化 をよく使います。これを図解と例題でかみ砕いて説明します。


1. フラグを使ったネスト脱出

問題例:二重ループで「見つかったらすぐ終了したい」

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

target = 5

found = False  # ← フラグを用意

for row in matrix:
    for num in row:
        if num == target:
            print("見つかった:", num)
            found = True
            break  # 内側ループを抜ける
    if found:  # フラグをチェックして外側も抜ける
        break

if not found:
    print("見つからなかった")
Python

テキスト図解

外側ループ
 └─ 内側ループ
      ├─ 見つかった → found=True → break
 └─ 外側ループで found を確認 → break

👉 ポイント:

  • found という「見つかったかどうか」を記録する変数を使う。
  • 内側ループを抜けた後、外側ループでもフラグを見て抜ける。
  • ネストが深くても「フラグで状態を持つ」ことで整理できる。

2. 関数化して早期 return で脱出

問題例:同じ「探索処理」を関数にまとめる

def search_matrix(matrix, target):
    for row in matrix:
        for num in row:
            if num == target:
                return f"見つかった: {num}"  # 関数ごと終了
    return "見つからなかった"

matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

print(search_matrix(matrix, 5))
print(search_matrix(matrix, 10))
Python

テキスト図解

search_matrix()
 └─ 外側ループ
      └─ 内側ループ
           ├─ 見つかった → return で関数終了
 └─ 最後まで見つからず → return "見つからなかった"

👉 ポイント:

  • 関数にまとめると「見つかったら return」で一気に抜けられる。
  • フラグを使わなくても「関数終了」で処理を止められる。
  • 実務では「複雑な処理は関数化して早期 return」がよく使われる。

3. フラグ vs 関数化の使い分け

方法メリットデメリット実務での使いどころ
フラグ既存コードに簡単に追加できるフラグ変数が増えると管理が面倒小規模な処理、既存コードにちょっと追加
関数化ネストを浅くできる、早期終了が明快関数分割の設計が必要大規模処理、再利用したい処理

4. 初心者向けまとめ

  • ネストが深いと読みにくい → 脱出テクが必要
  • フラグ方式: 状態を記録して外側ループも抜ける
  • 関数化方式: 関数にまとめて「見つかったら return」で一気に抜ける
  • 実務では「関数化して早期 return」がよく使われるが、簡単な場面ではフラグも便利

👉 次のステップとして「例外(try/except)を使ってネストを脱出する」テクもあります。これは「エラーが起きたら即座に処理を止める」場面でよく使われます。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました