Python入門 複数ループをわかりやすく解説! 改

 2019/11/24    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文の練習②

[問題]九九プログラムを書き換えて2x5=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文の練習①で書いたプログラムを書き換えて、1x5=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文が複数出てくるプログラムは少しだけややこしいですが、ルールを抑えてコードを読んでいただくと理解できることが分かっていただけたと思います。

  • 人気の投稿とページ

  • コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です