※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト:【Python入門】continue文での繰り返しの方法とは?
【Python入門】continue文での繰り返しの方法とは?
Pythonのループ文は同じ処理を何度も繰り返し行うのに便利です。そんなループ文ですが、繰り返しの中で、ある条件の時だけ実行し、それ以外の時はスキップしたい時があると思います。そんな時には、continue文を使うと便利です。今回は、continue文の使い方について説明します。
continue文は、for文などの繰り返しを行う処理の中で使われます。continue文を使うと、それ以降の処理が実行されずにスキップされ、次のループに進みます。
list1 = [1, 5, 6, 2, 4, 9, 11, 3]
for number in list1:
if(number < 5):
continue
print(number)
実行結果
5
6
9
11
この例では整数のリストの中から要素を取り出し、5より大きい要素だけを表示しています。その際に、数字が5未満の場合はcontinue文を実行するようにしています。continue文が実行されると、それ以降の内容がスキップされて次のループへ進みます。そのため、最後の要素が5未満の場合は最後のprint()がスキップされ、表示されないようになっています。
単純な処理の場合は、if-else文や例外などで実現することができますが、コードが長くなると見づらく複雑なものになってしまいます。ループ文の中で処理をスキップしたいときは、continue文を使うとよいでしょう。
while文におけるcontinue文
さきほどはfor文でcontinue文を使いましたが、同じループであるwhile文でも同じようにcontinue文を使うことができます。
list1 = [1, 5, 6, 2, 4, 9, 11, 3]
index = 0
while index < len(list1):
if(list1[index] < 5):
index += 1
continue
print(list1[index])
index += 1
実行結果
5
6
9
11
こちらはさきほどのfor文をwhile文で置き換えたものです。少し複雑になってしまいましたが、要素が5未満の場合はcontinue文を実行し、残りの処理をすべて飛ばす、ということに関してはfor文の場合と全く同じです。
continue文で多重ループを抜ける
Pythonでは、ループ文を途中から抜ける構文としてbreak文が用意されています。
for x in range(100):
if(x == 50):
print('ループ文を抜けました(ループ回数:{}回)'.format(x))
break
実行結果
ループ文を抜けました(ループ回数:50回)
このfor文ではループを100回繰り返しますが、if文でループ回数が50回に到達したらbreak文でループを抜けるようにしています。break文を使えば、ループを簡単に抜けることができます。しかし、break文の場合は1つのループを抜けることが出来ても、多重ループを抜けることはできません。
list1 = [ [1,5,7], [10,3, 4], [6, 8, 5]]
for list1_item in list1:
for item in list1_item:
print(item)
if(item >= 10):
print('10以上の数字が見つかりました')
break
実行結果
1
5
7
10
10以上の数字が見つかりました
6
8
5
この例では、2次元のリストの中身を多重ループで参照し、もし10以上の要素があればそこで表示を終了するようにしています。ところが、break文では1つのループしか抜けることができません。そのため、この例では内側のループだけを抜けてしまうので全体のループが終了しません。
実は、Pythonには多重ループを抜けるための方法は用意されていません。多重ループを一気に抜けたい場合は、自分で実装を考える必要があります。方法はいくつかありますが、実はcontinue文と、if文でもおなじみのelse節を組み合わせることで多重ループを一気に抜けることができます。
list1 = [ [1,5,7], [10,3, 4], [6, 8, 5]]
for list1_item in list1:
for item in list1_item:
print(item)
if(item >= 10):
print('10以上の数字が見つかりました')
break
else: #これはifではなく内側のfor文のelseなのに注意
continue
break
実行結果
1
5
7
10
10以上の数字が見つかりました
この方法なら、キレイにループを抜けることが出来ました。まず、内側のfor文を回すのですが、最後にelse節があります。for文のelse節は、ループが終わった後に最後に実行されます。内側のループが終わると、else節に移動し、continue文が実行されます。continue文が実行され、最後のbreakはスキップされるのでループが続行されます。
もし、内側のループでif文が実行される(この例だと10以上の数字が見つかる)と、breakで内側のループ文を抜けるので、else節は実行されません。そのため最後のbreakが実行され、ループ全体を抜けることができます。