Pythonのループ処理では、処理の流れを途中で変えるためにbreakとcontinueというキーワードをよく使います。
どちらも「途中で止める」「スキップする」といったイメージがありますが、動きはまったく異なります。
本記事では、図解とサンプルコードを使って、初心者の方でも直感的に理解できるように、breakとcontinueの違いと使い分けを丁寧に解説します。
breakとcontinueとは何か
breakとは

Pythonのbreakは、今いるループ(forやwhile)を、その場で完全に抜けるためのキーワードです。
ループの途中で「もうこれ以上繰り返す必要がない」と判断したときに、残りの処理をスキップして、一気にループの外側へ処理を移動させます。
例えば次のようなイメージです。
- リストの中から最初に見つかった値だけ調べればよいとき
- 条件を満たした時点で検索処理を終わらせたいとき
- 無限ループから抜け出したいとき
このような場面でbreakはとても便利です。
continueとは

continueは、現在の「1回分の繰り返し」だけを途中でやめて、すぐに次の周回に進むキーワードです。
ループ全体を終わらせるのではなく、「この回はもうこれ以上処理しなくていい」と判断したときに、その周回の残りの処理を飛ばして、ループの先頭に戻ります。
典型的には次のような使い方をします。
- 条件に合わないデータは無視して、合うデータだけ処理したいとき
- 入力値が不正な場合、その回の処理をスキップして次に進めたいとき
breakとcontinueの違いを一言で整理

一言でまとめると、次のように整理できます。
- break: ループ全体を途中で終了する
- continue: その周回の残りをスキップして、次の周回に進む
どちらも「途中で流れを変える」ためのものですが、どこまで処理を止めるのか(ループ全体か、この1回だけか)が決定的に違います。
breakの使い方と具体例
for文でのbreakの使い方

for文とbreakの基本的な組み合わせを、シンプルな例で確認します。
# 0〜9まで順番に表示するが、3が出たらループを終了する例
for i in range(10): # 0〜9まで繰り返す
print("i =", i)
if i == 3: # iが3になったら
print("3になったのでループを終了します")
break # forループを抜ける
print("ループの外側です")
i = 0
i = 1
i = 2
i = 3
3になったのでループを終了します
ループの外側です
この例では、iが3になった時点でforループ全体が終了していることがわかります。
4〜9は一度も処理されません。
while文でのbreakの使い方

while文では、特に無限ループから抜けるための出口としてbreakがよく使われます。
# ユーザーが "q" を入力するまで繰り返す例
while True: # 永遠に繰り返すように見える
s = input("何か入力してください(qで終了): ")
if s == "q": # qが入力されたら
print("終了します")
break # whileループを抜ける
print("あなたが入力した文字:", s)
print("プログラムを終了しました")
上のコードでは、条件はTrueなので本来なら終わりませんが、“q”が入力されたときだけbreakでループから脱出しています。
breakとif文の組み合わせ例

検索処理などでは、if文とbreakを組み合わせて「条件を満たしたら即終了」という書き方をよくします。
# リストから特定の値を探し、見つかったらすぐに終了する例
numbers = [10, 20, 30, 40, 50]
target = 30
found = False # 見つかったかどうかを記録するフラグ
for n in numbers:
print("調べています:", n)
if n == target: # もし探している値なら
found = True # 見つかった印をつける
break # ここでループを終了する
# ループの後で結果を確認する
if found:
print("見つかりました:", target)
else:
print("見つかりませんでした:", target)
調べています: 10
調べています: 20
調べています: 30
見つかりました: 30
ここでは、30を見つけた瞬間にそれ以降の40, 50のチェックを行っていない点が重要です。
処理の無駄を減らすことができます。
breakの動きを図で理解

コードを読むだけではイメージしづらいときは、図でフローを追ってみると理解しやすくなります。
breakの動きは、次の2点に集約されます。
- breakが実行された瞬間に、そのループ(for/while)の「外側」へ飛ぶ
- break以降の処理や、残りの周回はすべて行われない
図で見ると、ループの途中から「横に飛び出して処理が外に抜ける」イメージになります。
この「途中で飛び出す」という感覚を持っておくと、ネストしたループ(入れ子のループ)でも理解しやすくなります。
breakを使うときの注意点

breakを使う際に、特に注意したいポイントを整理します。
1つ目は、breakは「今いる1つのループ」しか抜けないという点です。
ループがネストしている場合、内側のループでbreakしても、外側のループは通常どおり続きます。
もう1つは、条件が複雑になりすぎると、どのタイミングでループが終わるのか分かりづらくなるという点です。
読み手にとって分かりやすくなるように、条件や処理を整理しながら使うことが大切です。
continueの使い方と具体例
for文でのcontinueの使い方

for文とcontinueを使うと、「特定の条件のときだけ残りをスキップする」という書き方ができます。
# 0〜9までのうち、偶数はスキップして奇数だけ表示する例
for i in range(10):
if i % 2 == 0: # iが偶数のとき
continue # この周回の残りをスキップして次へ
print("奇数:", i) # 偶数のときはここに到達しない
奇数: 1
奇数: 3
奇数: 5
奇数: 7
奇数: 9
このように、continueの行より下に書かれた処理は、その周回では実行されません。
while文でのcontinueの使い方

while文でcontinueを使うときは、特に無限ループにならないように注意が必要です。
# 1〜10までのうち、3の倍数はスキップして表示する例
i = 1
while i <= 10:
if i % 3 == 0:
i += 1 # ★ continueの前に必ずインクリメント
continue # この周回の残りをスキップ
print("値:", i)
i += 1 # 通常のインクリメント
値: 1
値: 2
値: 4
値: 5
値: 7
値: 8
値: 10
もしi += 1を書き忘れてcontinueしてしまうと、同じ値で条件判定が繰り返され、無限ループになる危険があります。
これがwhileとcontinueを組み合わせるときの代表的な落とし穴です。
continueとif文の組み合わせ例

continueは、「条件に合わないものをサッと飛ばす」フィルタ処理に向いています。
# マイナス値は不正データとして無視し、0以上だけ合計する例
values = [10, -5, 3, -2, 8]
total = 0
for v in values:
if v < 0: # マイナス値は不正とする
print("不正データをスキップします:", v)
continue # この周回はここで終わり
total += v # 0以上だけ合計に加える
print("合計値:", total)
不正データをスキップします: -5
不正データをスキップします: -2
合計値: 21
このように、「処理したくないケース」を先にifで弾いてcontinueすると、残りの処理がスッキリ書けます。
continueの動きを図で理解

continueの動きは次のように整理できます。
- continueが実行された瞬間、残りの処理は一切実行されない
- ただしループ自体は続き、次の周回が始まる
図で表すと、「途中で上に戻る矢印」が出て、残りの処理ブロックを飛び越えているイメージになります。
breakとの違いは、ループの外に出るか、ループ内の先頭に戻るかという部分です。
continueを使うときの注意点

continue利用時に注意したいポイントを挙げます。
- while文では、ループ変数の更新を忘れない
- continueより前で更新しておかないと、条件が変わらず無限ループになりやすいです。
- 処理フローが飛びやすく、読み手が迷子になりやすい
- continueが多用されると、「この条件のとき何が実行されて何がスキップされるのか」が分かりにくくなります。
- できるだけ条件を整理し、「この条件のときはここで終わり」という形で明確に書くと読みやすくなります。
breakとcontinueの使い分けと実践パターン
breakとcontinueの使い分け方

使い分けの軸はとてもシンプルです。
- ループ自体をそこで終わらせたい → break
- 検索して見つかったら終わり
- 条件が満たされたら処理を中止
- その周回だけスキップして、ループ自体は続けたい → continue
- 不要なデータを飛ばしつつ、必要なものだけ処理
- 一部ケースだけ特別扱いして、それ以外は通常処理
「今後の周回をどうしたいのか」を考えると、自然とどちらを使うべきかが見えてきます。
ネストしたループでのbreakとcontinueの挙動

ネストしたループでは、break/continueは「書かれているループ」にしか作用しないことが重要です。
# 2重ループでのbreakの挙動を確認する例
for i in range(1, 4): # 外側ループ
print("i =", i)
for j in range(1, 4): # 内側ループ
if j == 2:
print(" jが2なので内側ループをbreakします")
break # 内側ループだけ抜ける
print(" j =", j)
print("内側ループが終わりました")
i = 1
j = 1
jが2なので内側ループをbreakします
内側ループが終わりました
i = 2
j = 1
jが2なので内側ループをbreakします
内側ループが終わりました
i = 3
j = 1
jが2なので内側ループをbreakします
内側ループが終わりました
上の例では、breakはあくまで「内側のfor j」のみを終了させています。
外側のfor iは3回すべて実行されています。
続いて、continueの場合を見てみます。
# 2重ループでのcontinueの挙動を確認する例
for i in range(1, 4): # 外側ループ
print("i =", i)
for j in range(1, 4): # 内側ループ
if j == 2:
print(" jが2なので内側ループのこの周回をcontinueします")
continue # j==2のときだけ残りをスキップ
print(" j =", j)
print("内側ループが1周終わりました")
i = 1
j = 1
jが2なので内側ループのこの周回をcontinueします
j = 3
内側ループが1周終わりました
i = 2
j = 1
jが2なので内側ループのこの周回をcontinueします
j = 3
内側ループが1周終わりました
i = 3
j = 1
jが2なので内側ループのこの周回をcontinueします
j = 3
内側ループが1周終わりました
ここでは、j==2のときだけprint(” j =”, j)がスキップされ、内側ループ自体は1〜3まで回り続けています。
実践例1: 検索処理でのbreakの活用

現実的な例として、リストから条件に合うデータを探し、見つかったらすぐに処理を終えるパターンを見てみます。
# ユーザーのリストから、指定IDのユーザーを探す例
users = [
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"},
{"id": 3, "name": "Charlie"},
]
target_id = 2
found_user = None
for user in users:
print("チェック中:", user["id"], user["name"])
if user["id"] == target_id:
found_user = user
print("→ 対象ユーザーを見つけました")
break # 見つかったのでループを終了
if found_user is not None:
print("結果:", found_user["name"], "さんが見つかりました")
else:
print("対象のユーザーは見つかりませんでした")
チェック中: 1 Alice
チェック中: 2 Bob
→ 対象ユーザーを見つけました
結果: Bob さんが見つかりました
見つかった瞬間にbreakすることで、無駄な探索を省ける点がポイントです。
特にデータ量が多い場合は、この最適化が効いてきます。
実践例2: フィルタ処理でのcontinueの活用

続いて、データをフィルタリングする実践例です。
# 注文データから、有効なものだけ処理する例
orders = [
{"id": 1, "status": "ok", "amount": 1000},
{"id": 2, "status": "canceled", "amount": 2000},
{"id": 3, "status": "ok", "amount": 1500},
{"id": 4, "status": "error", "amount": 3000},
]
total = 0
for order in orders:
# キャンセルやエラーの注文はスキップする
if order["status"] != "ok":
print("注文", order["id"], "は状態が", order["status"], "のためスキップします")
continue # この注文の処理を飛ばして次へ
# ここに来るのはstatus == "ok"だけ
print("注文", order["id"], "を集計します")
total += order["amount"]
print("有効な注文の合計金額:", total)
注文 1 を集計します
注文 2 は状態が canceled のためスキップします
注文 3 を集計します
注文 4 は状態が error のためスキップします
有効な注文の合計金額: 2500
このように、「処理したくないもの」をcontinueで早めに弾くと、メインの処理部分がシンプルに保てます。
実践例3: break/continueを使わない書き方との比較

最後に、break/continueを使った書き方と、使わずにifだけで書いた場合を比較してみます。
例1: 検索処理 (breakあり)
# breakを使う版
numbers = [1, 3, 5, 7, 9]
target = 7
found = False
for n in numbers:
if n == target:
found = True
break # 見つかったのでループ終了
if found:
print("見つかりました")
else:
print("見つかりませんでした")
例2: 検索処理 (breakなし)
# breakを使わない版(読みづらい例)
numbers = [1, 3, 5, 7, 9]
target = 7
found = False
for n in numbers:
if not found: # まだ見つかっていない場合だけチェック
if n == target:
found = True # ここではループは続く
if found:
print("見つかりました")
else:
print("見つかりませんでした")
見つかりました
2つは同じ結果になりますが、breakありの方が「見つかったらそこで終わる」と明快です。
breakを使わない版は、「見つかった後もループが無駄に回り続ける」うえに、「if not found」などの条件が増えて読みにくくなっています。
例3: フィルタ処理 (continueあり)
# continueを使う版
values = [1, -2, 3, -4, 5]
result = []
for v in values:
if v < 0:
continue # マイナス値は飛ばす
result.append(v)
print(result)
例4: フィルタ処理 (continueなし)
# continueを使わない版
values = [1, -2, 3, -4, 5]
result = []
for v in values:
if v >= 0: # 条件を満たす場合だけ処理
result.append(v)
print(result)
[1, 3, 5]
この例では、どちらの書き方も比較的読みやすく、continueを使うかどうかは好みの範囲と言えます。
ただし、複数の条件でスキップしたいケースでは、「スキップ条件を先に並べてcontinueで弾く」スタイルの方が、処理の意図を理解しやすいことが多いです。
まとめ
breakとcontinueは、どちらもループ処理の流れを制御するための重要なキーワードです。
breakはループ自体を途中で終了し、continueはその周回だけを途中終了して次の周回へ進みます。
検索処理など「条件を満たしたら即終了したい場面」ではbreak、フィルタ処理など「特定条件のときだけスキップしたい場面」ではcontinueが力を発揮します。
図解のイメージを頭に置きながらコードを書くことで、より直感的で読みやすいループ処理を組み立てられるようになります。
