Python continueの使い方|ループ処理をスキップする基本
Python初心者向けにcontinue文の使い方を分かりやすく解説。for文やwhile文でのスキップ処理、実用的な使用例を詳しく説明します。
Python continueの使い方|ループ処理をスキップする基本
みなさん、Pythonでループを書いていて「この条件の時だけ処理を飛ばしたい」と思ったことはありませんか?
「特定の条件の時だけ何もしないで次の繰り返しに進みたい」 「エラーが出そうなデータは処理せずにスキップしたい」
こんな場面で活躍するのが、continue文です。
この記事では、Python初心者の方向けにcontinue
の基本的な使い方から実用的な活用法まで詳しく解説します。
読み終わる頃には、ループ処理がもっと自由自在に書けるようになりますよ!
continue文って何?どんな時に使うの?
continue文の基本的な仕組み
continue
文は、ループの中で現在の繰り返しをスキップして次の繰り返しに進むためのPythonの制御文です。
簡単に言うと、「今回はパスして次に行く」という命令ですね。
基本的な動作を見てみましょう。
for i in range(5): if i == 2: continue # i が 2 の時、この後の処理をスキップ print(f"数値: {i}")
このコードを実行すると、以下のような結果になります。
数値: 0
数値: 1
数値: 3
数値: 4
ポイントは、i
が2の時だけprint
文が実行されていないことです。
continue
文によって、残りの処理がスキップされて次の繰り返し(i=3)に進んでいます。
なぜcontinue文が便利なの?
continue文を使うことで、以下のようなメリットがあります。
メリット1: 条件に合わないデータを簡単に除外できる メリット2: エラーが起きそうな処理を回避できる メリット3: コードがシンプルで読みやすくなる
実際の使用例を見ながら、その便利さを体感していきましょう。
for文でのcontinue活用パターン
偶数だけを表示する例
まずは、基本的な使い方から始めましょう。 奇数をスキップして、偶数だけを表示する例です。
# 偶数のみを表示(奇数をスキップ)for num in range(1, 11): if num % 2 == 1: # 奇数の場合 continue print(f"偶数: {num}")
実行すると、以下のような結果になります。
偶数: 2
偶数: 4
偶数: 6
偶数: 8
偶数: 10
**num % 2 == 1
**で奇数を判定しています。
奇数の場合はcontinue
で処理をスキップし、偶数の場合のみprint
文が実行されます。
リストの空要素をスキップする例
実際のプログラムでよくある場面を見てみましょう。 リストに空の要素が含まれている場合の処理です。
fruits = ["りんご", "バナナ", "", "みかん", "ぶどう", ""]
for fruit in fruits: if fruit == "": # 空文字の場合はスキップ continue print(f"果物: {fruit}")
実行結果は以下のようになります。
果物: りんご
果物: バナナ
果物: みかん
果物: ぶどう
**空文字("")**の要素は処理されずに、中身のある果物名だけが表示されています。 データの前処理でよく使われるパターンですね。
特定の条件でスキップする例
もう少し複雑な条件でのスキップも見てみましょう。
scores = [85, 45, 92, 38, 77, 63, 19, 88]
print("合格ライン(60点)以上の成績:")for score in scores: if score < 60: # 60点未満はスキップ continue print(f"合格: {score}点")
このコードでは、60点未満の成績をスキップして合格ラインの成績だけを表示しています。
合格ライン(60点)以上の成績:
合格: 85点
合格: 92点
合格: 77点
合格: 63点
合格: 88点
while文でのcontinue活用法
while文でもcontinue
は同じように使えます。
ただし、無限ループにならないよう注意が必要です。
基本的なwhile文でのcontinue
count = 0while count < 10: count += 1 if count % 3 == 0: # 3の倍数をスキップ continue print(f"カウント: {count}")
実行結果は以下のようになります。
カウント: 1
カウント: 2
カウント: 4
カウント: 5
カウント: 7
カウント: 8
カウント: 10
重要なポイントは、count += 1
をcontinue
の前に書いていることです。
これにより、3の倍数の時でもカウントが進んで無限ループを避けています。
危険な例:無限ループになるパターン
以下のような書き方は絶対に避けてください。
# 悪い例(無限ループの危険)count = 0while count < 5: if count == 2: continue # count が更新されない # この後に count += 1 があってもスキップされる count += 1 print(count)
この例では、count
が2の時にcontinue
が実行されてcount += 1
がスキップされます。
その結果、count
が永遠に2のまま無限ループになってしまいます。
正しい書き方は、カウントの更新を必ず最初に行うことです。
continueとbreakの違いを理解しよう
初心者の方がよく混乱するのが、continue
とbreak
の違いです。
実際の例で違いを確認してみましょう。
print("=== continueの場合 ===")for i in range(5): if i == 2: continue # 2の時だけスキップして続行 print(i)
print("=== breakの場合 ===")for i in range(5): if i == 2: break # 2の時にループを完全に終了 print(i)
実行結果を見ると、違いがよくわかります。
=== continueの場合 ===
0
1
3
4
=== breakの場合 ===
0
1
continueは、現在の繰り返しをスキップして次へ進みます。 breakは、ループ自体を完全に終了してしまいます。
覚え方としては以下のようなイメージです。
- continue: 「今回はパス、次に行こう」
- break: 「もうループは終わり」
実用的なcontinue活用例
ファイル処理での空行スキップ
実際のプログラムでよく使われる例を見てみましょう。 テキストファイルの処理で空行をスキップする場合です。
lines = [ "1行目のテキスト", "", "3行目のテキスト", "", "5行目のテキスト"]
for line in lines: if line.strip() == "": # 空行をスキップ continue print(f"処理中: {line}")
実行結果は以下のようになります。
処理中: 1行目のテキスト
処理中: 3行目のテキスト
処理中: 5行目のテキスト
**line.strip()
**を使うことで、スペースだけの行も空行として扱えます。
実際のファイル処理では、このような前処理がよく必要になります。
エラー処理との組み合わせ
continue
とtry-except文を組み合わせた実用的な例です。
numbers = ["1", "2", "abc", "4", "def", "6"]
for num_str in numbers: try: num = int(num_str) except ValueError: print(f"'{num_str}'は数値ではありません") continue # エラーの場合は次の要素へ print(f"数値: {num}")
このコードの実行結果は以下のようになります。
数値: 1
数値: 2
'abc'は数値ではありません
数値: 4
'def'は数値ではありません
数値: 6
エラーが発生した要素は処理をスキップして、正常な要素だけを処理できています。 データ処理でエラーが発生してもプログラムが止まらずに済む便利な方法です。
複雑な条件でのデータフィルタリング
もう少し複雑な例も見てみましょう。 学生の成績データから条件に合うデータを抽出する例です。
students = [ {"name": "田中", "score": 85, "subject": "数学"}, {"name": "佐藤", "score": 45, "subject": "数学"}, {"name": "鈴木", "score": 92, "subject": "英語"}, {"name": "高橋", "score": 38, "subject": "数学"}, {"name": "伊藤", "score": 77, "subject": "数学"}]
print("数学で60点以上の学生:")for student in students: # 数学以外の科目はスキップ if student["subject"] != "数学": continue # 60点未満はスキップ if student["score"] < 60: continue print(f"{student['name']}: {student['score']}点")
実行結果は以下のようになります。
数学で60点以上の学生:
田中: 85点
伊藤: 77点
複数の条件を組み合わせることで、細かいデータフィルタリングができます。
条件ごとにcontinue
を使うことで、コードが読みやすくなりますね。
ネストしたループでのcontinue
ループが入れ子になっている場合のcontinue
の動作を確認しましょう。
for i in range(1, 4): print(f"外側ループ: {i}") for j in range(1, 4): if j == 2: continue # 内側ループの j=2 をスキップ print(f" 内側ループ: {j}")
実行結果は以下のようになります。
外側ループ: 1
内側ループ: 1
内側ループ: 3
外側ループ: 2
内側ループ: 1
内側ループ: 3
外側ループ: 3
内側ループ: 1
内側ループ: 3
重要なポイントは、continue
は最も内側のループにのみ影響することです。
内側ループでcontinue
が実行されても、外側ループは正常に続行されます。
もし外側ループをスキップしたい場合は、フラグ変数を使うか、関数に分割するなどの工夫が必要です。
continueを使う時の注意点
無限ループの回避方法
while文でcontinue
を使う時は、特に注意が必要です。
正しい書き方と間違った書き方を比較してみましょう。
# 良い例count = 0while count < 5: count += 1 # 先にカウントを更新 if count == 2: continue print(f"数値: {count}")
この書き方なら、continue
が実行されてもcount
は更新されるので安全です。
コードの可読性を保つ方法
continue
を使いすぎると、かえってコードが読みにくくなることがあります。
適切な使い方を心がけましょう。
# 複雑な条件での可読性を保つfor item in data_list: # 複数の条件をまとめて判定 if (item is None or item == "" or not isinstance(item, str)): continue # メインの処理 process_item(item)
複数の条件をまとめることで、メインの処理部分が明確になります。 条件が複雑な場合は、コメントを追加することも大切です。
パフォーマンスを考慮した使い方
大量のデータを処理する場合、continue
を効果的に使うことでパフォーマンスを向上できます。
# 大量データの効率的な処理large_numbers = range(1, 1000000)
# 5の倍数のみを処理processed_count = 0for num in large_numbers: if num % 5 != 0: continue # 早期に条件判定してスキップ # 時間のかかる処理(5の倍数のみ) result = num ** 2 processed_count += 1
print(f"処理件数: {processed_count}")
早期にスキップすることで、不要な処理を避けて効率を上げることができます。 特に、重い処理の前に条件チェックを入れるのは有効な手法です。
より実践的な活用例
設定ファイルの処理
実際のアプリケーションでよく使われる例を見てみましょう。
config_lines = [ "# これはコメント行", "", "database_host=localhost", "# 別のコメント", "database_port=5432", "", "debug_mode=true"]
config = {}for line in config_lines: line = line.strip() # 空行やコメント行をスキップ if line == "" or line.startswith("#"): continue # 設定値を辞書に追加 key, value = line.split("=") config[key] = value
print("読み込まれた設定:")for key, value in config.items(): print(f"{key}: {value}")
実行結果は以下のようになります。
読み込まれた設定:
database_host: localhost
database_port: 5432
debug_mode: true
コメント行と空行をスキップして、有効な設定行だけを処理しています。 設定ファイルの読み込みでよく使われるパターンです。
バリデーション処理
入力データの検証処理での活用例です。
user_inputs = [ {"name": "田中", "age": 25, "email": "tanaka@example.com"}, {"name": "", "age": 30, "email": "empty@example.com"}, # 名前が空 {"name": "佐藤", "age": -5, "email": "sato@example.com"}, # 年齢が無効 {"name": "鈴木", "age": 28, "email": "invalid-email"}, # メール形式が無効 {"name": "高橋", "age": 35, "email": "takahashi@example.com"}]
valid_users = []for user in user_inputs: # 名前が空の場合はスキップ if user["name"] == "": print(f"エラー: 名前が空です - {user}") continue # 年齢が無効な場合はスキップ if user["age"] < 0: print(f"エラー: 年齢が無効です - {user}") continue # メール形式が無効な場合はスキップ if "@" not in user["email"]: print(f"エラー: メール形式が無効です - {user}") continue # 全ての条件をクリアした場合のみ追加 valid_users.append(user)
print(f"有効なユーザー数: {len(valid_users)}")for user in valid_users: print(f"- {user['name']} ({user['age']}歳)")
このように、段階的なバリデーションで無効なデータをスキップできます。 各段階でエラーメッセージを出力することで、デバッグも容易になります。
まとめ
continue
文は、ループ処理において特定の条件で現在の繰り返しをスキップする際に使用する重要な制御文です。
continue文の主な活用場面
データフィルタリングで条件に合わないデータをスキップする時に便利です。 エラー処理で問題のあるデータを除外して処理を継続する時に重宝します。 パフォーマンス向上で不要な処理を早期にスキップする時に効果的です。
覚えておきたいポイント
while文での使用時は無限ループに注意しましょう。 ネストループでは内側ループにのみ影響することを理解しましょう。 可読性の確保のため、複雑な条件は適切にコメントを付けましょう。
実際に使ってみよう
continue
文を適切に活用することで、より効率的で読みやすいPythonコードが書けるようになります。
最初は簡単な例から始めて、徐々に実用的な場面で活用してみてください。
きっと「こんな時はcontinue
が便利だな」と感じる場面が増えてくるはずです。
ぜひ、今日から実際のコードで試してみてくださいね!