閉じる

【Python入門】breakとcontinueの違いを具体例と図で徹底解説

Pythonのループ処理では、処理の流れを途中で変えるためにbreakcontinueというキーワードをよく使います。

どちらも「途中で止める」「スキップする」といったイメージがありますが、動きはまったく異なります。

本記事では、図解とサンプルコードを使って、初心者の方でも直感的に理解できるように、breakとcontinueの違いと使い分けを丁寧に解説します。

breakとcontinueとは何か

breakとは

Pythonのbreakは、今いるループ(forやwhile)を、その場で完全に抜けるためのキーワードです。

ループの途中で「もうこれ以上繰り返す必要がない」と判断したときに、残りの処理をスキップして、一気にループの外側へ処理を移動させます。

例えば次のようなイメージです。

  • リストの中から最初に見つかった値だけ調べればよいとき
  • 条件を満たした時点で検索処理を終わらせたいとき
  • 無限ループから抜け出したいとき

このような場面でbreakはとても便利です。

continueとは

continueは、現在の「1回分の繰り返し」だけを途中でやめて、すぐに次の周回に進むキーワードです。

ループ全体を終わらせるのではなく、「この回はもうこれ以上処理しなくていい」と判断したときに、その周回の残りの処理を飛ばして、ループの先頭に戻ります。

典型的には次のような使い方をします。

  • 条件に合わないデータは無視して、合うデータだけ処理したいとき
  • 入力値が不正な場合、その回の処理をスキップして次に進めたいとき

breakとcontinueの違いを一言で整理

一言でまとめると、次のように整理できます。

  • break: ループ全体を途中で終了する
  • continue: その周回の残りをスキップして、次の周回に進む

どちらも「途中で流れを変える」ためのものですが、どこまで処理を止めるのか(ループ全体か、この1回だけか)が決定的に違います。

breakの使い方と具体例

for文でのbreakの使い方

for文とbreakの基本的な組み合わせを、シンプルな例で確認します。

Python
# 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がよく使われます。

Python
# ユーザーが "q" を入力するまで繰り返す例

while True:  # 永遠に繰り返すように見える
    s = input("何か入力してください(qで終了): ")
    
    if s == "q":  # qが入力されたら
        print("終了します")
        break     # whileループを抜ける
    
    print("あなたが入力した文字:", s)

print("プログラムを終了しました")

上のコードでは、条件はTrueなので本来なら終わりませんが、“q”が入力されたときだけbreakでループから脱出しています。

breakとif文の組み合わせ例

検索処理などでは、if文とbreakを組み合わせて「条件を満たしたら即終了」という書き方をよくします。

Python
# リストから特定の値を探し、見つかったらすぐに終了する例

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点に集約されます。

  1. breakが実行された瞬間に、そのループ(for/while)の「外側」へ飛ぶ
  2. break以降の処理や、残りの周回はすべて行われない

図で見ると、ループの途中から「横に飛び出して処理が外に抜ける」イメージになります。

この「途中で飛び出す」という感覚を持っておくと、ネストしたループ(入れ子のループ)でも理解しやすくなります。

breakを使うときの注意点

breakを使う際に、特に注意したいポイントを整理します。

1つ目は、breakは「今いる1つのループ」しか抜けないという点です。

ループがネストしている場合、内側のループでbreakしても、外側のループは通常どおり続きます。

もう1つは、条件が複雑になりすぎると、どのタイミングでループが終わるのか分かりづらくなるという点です。

読み手にとって分かりやすくなるように、条件や処理を整理しながら使うことが大切です。

continueの使い方と具体例

for文でのcontinueの使い方

for文とcontinueを使うと、「特定の条件のときだけ残りをスキップする」という書き方ができます。

Python
# 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を使うときは、特に無限ループにならないように注意が必要です。

Python
# 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は、「条件に合わないものをサッと飛ばす」フィルタ処理に向いています。

Python
# マイナス値は不正データとして無視し、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の動きは次のように整理できます。

  1. continueが実行された瞬間、残りの処理は一切実行されない
  2. ただしループ自体は続き、次の周回が始まる

図で表すと、「途中で上に戻る矢印」が出て、残りの処理ブロックを飛び越えているイメージになります。

breakとの違いは、ループの外に出るか、ループ内の先頭に戻るかという部分です。

continueを使うときの注意点

continue利用時に注意したいポイントを挙げます。

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

breakとcontinueの使い分けと実践パターン

breakとcontinueの使い分け方

使い分けの軸はとてもシンプルです。

  • ループ自体をそこで終わらせたい → break
    • 検索して見つかったら終わり
    • 条件が満たされたら処理を中止
  • その周回だけスキップして、ループ自体は続けたい → continue
    • 不要なデータを飛ばしつつ、必要なものだけ処理
    • 一部ケースだけ特別扱いして、それ以外は通常処理

「今後の周回をどうしたいのか」を考えると、自然とどちらを使うべきかが見えてきます。

ネストしたループでのbreakとcontinueの挙動

ネストしたループでは、break/continueは「書かれているループ」にしか作用しないことが重要です。

Python
# 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の場合を見てみます。

Python
# 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の活用

現実的な例として、リストから条件に合うデータを探し、見つかったらすぐに処理を終えるパターンを見てみます。

Python
# ユーザーのリストから、指定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の活用

続いて、データをフィルタリングする実践例です。

Python
# 注文データから、有効なものだけ処理する例

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あり)

Python
# 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なし)

Python
# 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あり)

Python
# continueを使う版

values = [1, -2, 3, -4, 5]
result = []

for v in values:
    if v < 0:
        continue  # マイナス値は飛ばす
    
    result.append(v)

print(result)

例4: フィルタ処理 (continueなし)

Python
# 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が力を発揮します。

図解のイメージを頭に置きながらコードを書くことで、より直感的で読みやすいループ処理を組み立てられるようになります。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!