Python | 三重ループの continue の流れを理解する

Python
スポンサーリンク

「3重ループで continue を使うと、どこがスキップされて、どこが続くのか?」をテキスト図と例題で直感的に説明します。ポイントは「continueは“その時点でいるループ”だけをスキップする」ということです。


動きの全体像(テキスト図)

三重ループの構造と continue のジャンプ先

for A in ...:            # 外側ループ
  for B in ...:          # 中側ループ
    for C in ...:        # 内側ループ(今ここにいることが多い)
      ├─ 条件成立 → continue
      │       ↳ 内側ループ C の次の反復へジャンプ
      └─ 条件不成立 → 残りの処理を実行

    └─ C がすべて終わると B の次の反復へ

  └─ B がすべて終わると A の次の反復へ
  • 結論: どの階層で continue を書いたかで、スキップされる範囲が決まります。内側で書けば「内側のその回だけ」スキップ。中側で書けば「中側のその回ごと」スキップします。外側は影響を受けません。

例題1:内側ループでの continue(C だけを飛ばす)

for A in range(1, 3):        # A: 1, 2
    for B in range(1, 3):    # B: 1, 2
        for C in range(1, 4):# C: 1, 2, 3
            if C == 2:       # C が 2 のときだけ飛ばす
                continue
            print(f"A={A}, B={B}, C={C}")
Python

出力(C==2 の行が抜ける)

A=1, B=1, C=1
A=1, B=1, C=3
A=1, B=2, C=1
A=1, B=2, C=3
A=2, B=1, C=1
A=2, B=1, C=3
A=2, B=2, C=1
A=2, B=2, C=3
  • ポイント: continue は「今いる一番内側のループ(C)」の次の反復へ跳びます。A と B はそのまま続きます。

例題2:中側ループでの continue(B ごと飛ばす)

for A in range(1, 4):        # A: 1, 2, 3
    for B in range(1, 4):    # B: 1, 2, 3
        if B == 2:           # B が 2 のときは中側のその回を丸ごとスキップ
            continue
        for C in range(1, 3):# C: 1, 2
            print(f"A={A}, B={B}, C={C}")
Python

出力(B==2 のときの行がすべて抜ける)

A=1, B=1, C=1
A=1, B=1, C=2
A=1, B=3, C=1
A=1, B=3, C=2
A=2, B=1, C=1
A=2, B=1, C=2
A=2, B=3, C=1
A=2, B=3, C=2
A=3, B=1, C=1
A=3, B=1, C=2
A=3, B=3, C=1
A=3, B=3, C=2
  • ポイント: B==2 のときは「内側ループ C を開始せず」に、B の次の値へ進みます。外側 A は影響を受けません。

例題3:外側ループでの continue(A ごと飛ばす)

for A in range(1, 4):        # A: 1, 2, 3
    if A == 2:               # A が 2 の回は丸ごと飛ばす
        continue
    for B in range(1, 3):    # B: 1, 2
        for C in range(1, 3):# C: 1, 2
            print(f"A={A}, B={B}, C={C}")
Python

出力(A==2 のブロックが丸ごと抜ける)

A=1, B=1, C=1
A=1, B=1, C=2
A=1, B=2, C=1
A=1, B=2, C=2
A=3, B=1, C=1
A=3, B=1, C=2
A=3, B=2, C=1
A=3, B=2, C=2
  • ポイント: 外側での continue は「その外側の反復全体」を飛ばすので、内側に到達しません。

つまずきやすいポイントとコツ

  • 内側での continue は外側まで影響しない:
    誤解しがち: 内側で continue したら「ぜんぶ飛ぶ」わけではありません。あくまで「内側のその回だけ」です。
  • while での continue は更新忘れに注意:
    落とし穴: 条件の更新前に continue すると無限ループになりがち。
A = 0
while A < 3:
    A += 1            # 先に更新
    if A == 2:
        continue      # ここで飛ばしても次へ進める
    print("A:", A)
Python
  • 外側を飛ばしたいなら外側で判定:
    コツ: 「外側の単位ごとにスキップしたい」なら、その階層に判定を持っていくのがシンプル(例題2・3のように、B を飛ばすなら B の直後で判定)。

使い分けの目安

  • 特定の要素だけ処理を飛ばしたい: 内側で continue
  • ある“段”全体をスキップしたい(列や行を丸ごと): 該当階層の直後で continue
  • 途中で完全にやめたい: break(別テーマですが、終了したいときに使う)
  • 何もしないで形だけ残したい: pass(未実装の場所用)

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