Pythonのcontinueの使い方!(ループをスキップ)

Python Python

Pythonでcontinueを使う方法について書いています。
continueについて解説した後に、下記のことについて書いています。

・continueはwhileで使えるのか?
・continueを深い階層(多重)で使用したときの動作
・continueとbreakの違い
・continueとpassの違い

載せているコードはPythonの3.11.0で動作を確認しました。

continueの使い方

ループ処理の中でcontinueを使うことができます。
continueを使うと、ループの先頭に戻って、後続の処理がスキップできます。

例えば、下記のように使います。

for i in range(10):
    if i == 5:
        continue
    print(i)

for文で変数iが0から9までの間、10回繰り返します。

ループ処理の最初にif文で判定しています。
変数iが「5」だったときに、continueを実行します。

ループ処理の最後にprint関数を使って、変数iの値を出力しました。
プログラムで出力した内容を確認すると、下記にようになります。

0
1
2
3
4
6
7
8
9

変数iが「5」がだったときには、出力されずにループの先頭に戻ります。
そのあと、変数iがカウントアップされながら、処理が続いたことが確認できました。

continueをwhileで使う

while文でループ処理をしたときにも、continueを使うことができます。
例えば、下記のように使います。

i = 0
while i < 10:
    if i == 5:
        i += 1
        continue
    print(i)
    i += 1

変数iに0を代入して、0から9までの10回繰り返します。

if文で判定して、変数iが「5」だったときにcontinueしています。
whileでは自動的にカウントアップされないので、カウント値をここで「+1」しています。
これがないと、無限ループになってしまうので、気をつけましょう。

if文の判定の後に、変数iの出力処理とカウントアップをしています。
プログラムを実行すると、下記のようになりました。

0
1
2
3
4
6
7
8
9

変数iが「5」のときには、出力されずにループの先頭に戻って、処理が続いていることが確認できました。

continueを深い階層(多重)で使うと?

continueを2重ループなど、深い階層で使ったときです。
そのときには、呼び出されたループのみに適用されます。

例えば、下記のように使います。

for i in range(5):
    for j in range(5):
        if j == 1 or j == 3:
            continue
        print(f'i:{i} j:{j}')

変数iの箇所のループ処理が0から4までの5回繰り返されます。
変数jの箇所のループ処理も0から4までの5回繰り返されます。

変数jの箇所のループ処理で、jの値が「1」または「3」だったときにcontinueするようにしました。
こうすると、値が「1」か「3」のときには、変数jのループ処理の先頭に戻って処理を続けます。

つまり、変数iのループは5回繰り返しますが、変数jのループは、値が「1」か「3」のときにスキップされます。
プログラムを実行すると、下記のようになりました。

i:0 j:0
i:0 j:2
i:0 j:4
i:1 j:0
i:1 j:2
i:1 j:4
i:2 j:0
i:2 j:2
i:2 j:4
i:3 j:0
i:3 j:2
i:3 j:4
i:4 j:0
i:4 j:2
i:4 j:4

変数iのループは4回繰り返されていますが、変数jのループは2回スキップされました。
このように、continueは呼び出されたループ処理のみに適用されます。

continueとbreakの違い

continueはループ処理の中で呼び出すことで、呼び出されたループの先頭に戻って、後続の処理をスキップしました。
breakはループ処理の中で呼び出すと、ループ処理を抜けます。

下記の記事にソースコードを載せて比べてみているので、確認してみてください。
・Pythonのbreakの使い方!サンプル5選(ループを抜ける)

continueとpassの違い

continueは呼び出すと、呼び出されたループの先頭に戻って、後続の処理をスキップしました。
passは呼び出されても、何もしない処理になります。

同じソースコードの一部を変えて、動作を確認します。

continueのとき

下記は変数iが0から4までカウントアップしながら、5回処理します。

for i in range(5):
    if i == 3:
        continue
    print(i)

変数iが3だったときにcontinueします。
そのため「3」は出力されずに、スキップされて、実行結果は下記のようになります。

0
1
2
4

passのとき

同じプログラムのcontinueの箇所をpassに変えました。

for i in range(5):
    if i == 3:
        pass
    print(i)

passだと何もしないので、変数iが3のときも何もしません。
実行すると、下記のように、通常通りループを回した時と同じ結果になります。

0
1
2
3
4

passについては、下記の記事を確認してみてください。
・Pythonのpass文とは?エラーパターン5選!

終わりに

今回はPythonのcontinueの使い方について書きました。
記事の内容をまとめると、下記のようになります。

・ループ処理の中でcontinueを呼び出すと、ループの先頭に戻って、後続の処理がスキップされる。
・continueはwhileでも使える。カウントアップに注意する。
・2重ループなど、深い階層で呼び出したときは呼び出されたループ処理のみに適用される。
・continueとbreakは違う。breakを呼び出すと、ループ処理を抜ける。
・continueとpassは違う。passを呼び出しても何もしない。

コメント

タイトルとURLをコピーしました