「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(未実装の場所用)

