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文が複数出てくるプログラムは少しだけややこしいですが、ルールを抑えてコードを読んでいただくと理解できることが分かっていただけたと思います。
最新投稿記事
-
AIプロジェクトの企画と失敗しない進め方を解説 2021年1月19日
-
AVILEN人材育成コース受講体験談:山田裕之さん「E資格の”その先”を目指して」 2021年1月8日
-
AI導入とは?RPAとの関係、プロセス、事例、メリット、費用を詳細に解説 2020年12月7日
-
注目のAI開発企業11社!支援領域や提供方法など検証! 2020年10月28日
-
AI人材を育成できる研修プログラムを一挙紹介! 2020年10月20日
-
【2021年版】期待のAI資格11選!就職・転職にも使える! 2020年10月18日
-
JDLAとは?G検定、E資格の認定プログラム、合格者の会など紹介! 2020年10月14日
-
G検定(2020#3)受験申し込み開始、11月7日(土)実施-JDLA 2020年10月1日
-
【独占】コロナ禍で人材登録急増、アノテーション単月売上高は4倍超-パソナJOB HUB 2020年10月1日
-
E資格を転職に活用!評判とデータを徹底調査! 2020年9月29日
週間ランキング
【2021年版】コスパ重視のG検定対策!おすすめの本・講座・教材を一挙紹介! 2020年6月6日
G検定に短期間・独学で合格した勉強法を解説! 2020年8月3日
【2021年版】期待のAI資格11選!就職・転職にも使える! 2020年10月18日
G検定は難しい?難易度・合格ライン・問題を徹底解説! 2020年6月19日
G検定に落ちた人、合格した人。勉強法の違いはどこにある? 2020年6月25日
注目のAI開発企業11社!支援領域や提供方法など検証! 2020年10月28日
最弱オセロを初めて攻略した天才オセロ高校生。負け方を解説! 2020年7月31日
【2021年版】E資格とは?大注目のディープラーニングの資格を解説! 2020年9月29日
E資格の難易度を、合格率と問題から徹底分析! 2020年8月11日
E資格を転職に活用!評判とデータを徹底調査! 2020年9月29日
