2019/11/24
2020/04/14
Python入門 複数ループをわかりやすく解説! 改
反復処理(イテレーション)の中には、しばしばfor文が複数ある書き方がされることがあります。
このような書き方のことを”多重ループ”や”ネストしたループ”といいます。これを見ると混乱してしまうかたも多くいるのではないでしょうか?
今回の記事では2重ループの書き方や扱い方について解説します!
目次
for文が複数ある時の書き方とルール
for文は重ねて書くことが出来ますが、初学者の多くはそれがどのような順番で実行されるのか分からなかったりします。今回の記事で書き方や実行のルールを把握していきましょう!
書き方
まずfor文が複数ある時のコードを見てみましょう!
list1 = [1,2,3] list2 = [4,5,6] for i in list1: for j in list2: print(i,j)
1 4 1 5 1 6 2 4 2 5 2 6 3 4 3 5 3 6
ルール
※以下list1のfor文を外側のループ、list2のfor文を内側のループと記します。
多重ループは”外側のループが一回まわるごとに、内側のループが全部回る。”というルールに従って実行されていきます。
for文は何重にも重ねることが出来ますが、3重以上になるとコードが読みにくくなるのであまりオススメしません。
2重ループを抜ける方法
2重ループの処理を終わらせたりスキップしたりする方法は2つあります!
break文
break文はfor文の処理を終了させます。
百聞は一見に如かず。コードを見てみましょう!
list1 = [1,2,3] list2 = [4,5,6] for i in list1: for j in list2: if j == 5: #jが5になったときに実行される print('breakします') break else: print(i,j)
1 4 breakします 2 4 breakします 3 4 breakします
これはjが5になったときに内側のループを終わらせています。
break文自体はfor文を終わらせるために使います。
今回のように2重ループの時は2回break文を書く必要があり、3重ループの時は3回break文を書く必要があります。
これについて次の例で見ていきましょう。
2重ループを抜ける方法
前述の通り、break文を使うと直前のfor文から抜け出すことが出来るので2重ループから抜け出すには2つ以上のbreak文を記述する必要があります!
list1 = [1,2,3] list2 = [4,5,6] for i in list1: print("start") for j in list2: if j == 6: print('break!!!') break else: print(i,j) break
start 1 4 1 5 break!!!
continue文
continue文とは主にループ内で使用する構文です。continue文を使うとfor文の処理をスキップすることが出来ます。
こちらもコードから見ていきましょう!
list1 = [1,2,3] list2 = [4,5,6] for i in list1: for j in list2: if j == 5: #jが5になったら実行される print("5のみスキップします") continue print(i,j)
1 4 5のみスキップします 1 6 2 4 5のみスキップします 2 6 3 4 5のみスキップします 3 6
こちらは2重ループはあまり関係ありませんが、条件に一致する数字が来たらその処理をスキップするというコードになっています。
2重ループを使った演習
それでは、2重ループを使って演習をしましょう!
九九を作ろう!
[問題]for文を2つ使って九九を出力してください。
1x1=1 1x2=2 1x3=3 ・・・ 9x8=72 9x9=81
for i in range(1,10): for j in range(1,10): ans = i*j print("{0}x{1}={2}".format(i,j,ans))
色々な書き方があるので、for文を2つ使って出力結果が同じになっていれば正解としてください。
それでは、このコードを使って少しbreak文やcontinue文の練習もしてみましょう
break文の練習①
[問題]九九プログラムを書き換えて1の段だけが出力されるプログラムを書いてください
1x1=1 1x2=2 1x3=3 1x4=4 1x5=5 1x6=6 1x7=7 1x8=8 1x9=9 ブレイクします!
for i in range(1,10): if (i==2): print("ブレイクします!#) break for j in range(1,10): ans = i*j print('{0}x{1}={2}'.format(i,j,ans))
break文の練習②
[問題]九九プログラムを書き換えて2×5=10まで出力されたら終了されるプログラムを書いてください。
1x1=1 1x2=2 1x3=3 ・・・ 2x5=10
for i in range(1,10): for j in range(1,10): ans = i*j print('{0}x{1}={2}'.format(i,j,ans)) if(i==2 and j==5): print('内側のループをブレイクします。') break if (i==2 and j==5): print('外側のループをブレイクします') break
continue文の練習
[問題]break文の練習①で書いたプログラムを書き換えて、1×5=5がスキップされるプログラムを書いてください。
1x1=1 1x2=2 1x3=3 1x4=4 スキップします! 1x6=6 1x7=7 1x8=8 1x9=9 ブレイクします!
for i in range(1,10): if (i==2): print('ブレイクします!') break for j in range(1,10): if (i ==1 and j==5): print('スキップします!') continue ans = i*j print('{0}x{1}={2}'.format(i,j,ans))
今回の記事はこれで以上となります。
多重ループのようなfor文が複数出てくるプログラムは少しだけややこしいですが、ルールを抑えてコードを読んでいただくと理解できることが分かっていただけたと思います。
Recommended