Pythonのcontinueによるループ処理のスキップと使い方をわかりやすく解説

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

continueの概要

ループの現在の周回をスキップして次の繰り返しへPython予約語

continue

概要 continue(コンティニュー)は、ループ(for 文や while 文)のブロック内で、それ以降の処理を実行せずに強制的にスキップし、即座に次の周回(イテレーション)の先頭へジャンプさせるためのキーワードです。

わかりやすく説明 continue は、すごろくやスタンプラリーの「一回休み(ただし強制的に次の番へ進む)」のようなものです。「今回のデータの処理はここで終わりにして、さっさと次のデータの処理に移ろう!」とPythonに指示を出すときに使います。ループそのものを完全に終わらせてしまう break とは違い、ループ自体は最後まで続きます

  • 条件に合致した特定の周回だけ、残りのコード(重い計算や書き込みなど)を飛ばすことができます。
  • ループ自体は終了しないため、すべてのデータをチェックしつつ、不要なデータだけを除外(フィルタリング)するのに最適です。
  • for ループ、while ループのどちらでも同じように機能します。

continueの考え方をイメージで理解

continueの基本的な使い方

1から5までの数字を順にチェックし、偶数のときだけ continue で出力をスキップする(結果的に奇数だけを表示する)例です。

# continueを使ったループのスキップ
for i in range(1, 6):
    if i % 2 == 0:
        continue  # 偶数の場合は、これより下の print を無視して即座に次の「i」の処理へ進む
    print(i)      # 結果: 1, 3, 5 だけが表示される
  • i が 2 や 4 のとき、continue が発動するため、その下にある print(i) は実行されません。

whileループでのcontinueの使用

while ループでも同様に処理をスキップできますが、変数の更新位置に注意する必要があります(詳細は注意点セクションで解説)。

# whileループでcontinueを使う
num = 0
while num < 5:
    num += 1
    if num == 3:
        continue  # numが3のときは、下のprintを飛ばして即座に「while num < 5」の条件チェックへ戻る
    print(num)    # 結果: 1, 2, 4, 5 が表示される(3だけ消える)

ネスト(入れ子)されたループでのcontinueの動き

continue は、「いま自分が直接属している一番内側のループ」に対してのみスキップを適用します。外側のループには影響を与えません。

# ネストされたループでcontinueを使う
for i in range(2):
    for j in range(4):
        if j == 2:
            continue  # jが2のときだけ、内側のループのprintをスキップ
        print(f"i={i}, j={j}")
  • j == 2 のタイミングだけ内側の処理がスキップされますが、j が 3 になったときや、外側の i が次の値に進む動きは邪魔されません。

continueの実践的な使用例(不正データの除外)

実務で非常によくある「リストからマイナスの値や異常値などの不要なデータをスキップし、正常なデータだけを安全に処理する」コードです。

# 負の数をスキップして正の数だけ合計する
numbers = [10, -5, 20, -3, 30]
total = 0

for num in numbers:
    if num < 0:
        print(f"警告: 負の数 {num} を検知したためスキップします。")
        continue  # 負の数は足し算せずに次のデータへ
        
    total += num

print(f"正の数だけの合計: {total}") # 結果: 60

continueの注意点

  • whileループ内での「無限ループ化」に厳重注意while 文の中で continue を使う場合、変数をカウントアップ(i += 1 など)するコードより手前で continue を走らせてしまうと、変数が永久に変化しなくなり、画面がフリーズする無限ループが発生します。
    # 【危険な例】永久に2から進まなくなる無限ループ
    i = 0
    while i < 5:
        if i == 2:
            continue # i+=1 を超えて上に戻るため、iはずっと2のまま固定されフリーズします
        print(i)
        i += 1
    
    # 【対策】continueが動く前に、必ず変数のカウントを進めておく
    i = 0
    while i < 5:
        if i == 2:
            i += 1   # ジャンプする前にあらかじめ次へ進めておく
            continue 
        print(i)
        i += 1
  • 関数やループの外(地べた)では絶対に使えないcontinue は、forwhile という繰り返し構文の内部に書かれて初めて意味を持つキーワードです。通常の if 文の中であっても、それがループに囲まれていなければ SyntaxError となりプログラムが起動すらしません。

continueのよくある質問

Q: `continue` と `break` の使い分けがいつもごっちゃになります。
A: 「そこで試合終了にするか、次の試合に行くか」の違いです。 break はその時点でループの壁を破壊して完全に外へ脱出します(もう繰り返しは行いません)。 continue は今回の周回を諦めて、次の周回へ強制ワープします(繰り返しは継続します)。

# breakの動き(3で完全ストップ)
for n in range(1, 5):
    if n == 3: break
    print(n) # 結果: 1, 2

# continueの動き(3だけ飛ばして次へ)
for n in range(1, 5):
    if n == 3: continue
    print(n) # 結果: 1, 2, 4
Q: `continue` を使わずに `if-else` だけでも同じ処理が書ける気がしますが、なぜ `continue` が必要なのですか?
A: おっしゃる通り、if 文の条件判定だけでも同じ動きは再現できます。しかし、処理が複雑になって条件が何重にも重なると、コードのインデント(字下げ)がどんどん深くなり、非常に読みづらいコード(ネスト地獄)になってしまいます。 continue を使って「不要なデータを最初に弾いて早期リターンさせる」ことで、インデントを浅く保ち、コードの可読性を劇的に向上させることができます。

# continueを使わない場合(インデントが深くなりがち)
for data in data_list:
    if dataは正常:
        if dataは未処理:
            # ここにメインの長い処理を書く(右にズレて読みづらい)

# continueを使った場合(スッキリして読みやすい:ガード節)
for data in data_list:
    if dataは異常: continue
    if dataは処理済: continue
    # ここにメインの処理を書く(左側に揃って読みやすい!)

まとめ

continue は、ループ処理の流れをスマートにコントロールし、不要な処理を効率よくスキップするための重要な制御キーワードです。

  • 現在の周回の残り処理をすべて無視し、次のループの先頭へと強制的に移行させる。
  • break とは違い、ループそのものを中断・終了することはない。
  • while ループで用いる際は、条件変数の更新処理までスキップしてしまわないよう、記述位置に細心の注意を払う。

大量のデータを精査するスクリプトや、条件分岐が多く複雑なループを記述する際、continue を使いこなせるとコードが格段に美しく、読みやすくなります。ぜひ積極的に活用してみてください。