for文
前回、Pythonのfor文、while文のbreak、continue、pass、elseの使い方を紹介しました。

今回は複数のfor文からbreakで全てのfor文から抜ける方法方法を紹介します。
それでは始めていきましょう。
for文とbreakのおさらい
まずはfor文とbreakのおさらいから。
for文はリストの要素を一つずつ取り出して処理する文のことでした。
result = []
for i in range(0, 5):
print(i)
result.append(i)
print(result)
実行結果
0
1
2
3
4
[0, 1, 2, 3, 4]
この場合、「range(0, 5)」なので、「0, 1, 2, 3, 4」というリストが作られ、一つずつ表示されるとともにresultというリストに格納しています。
このようにリストの全部の要素に対して処理をする場合はこれでいいのですが、リストの要素がある条件になった場合は処理をやめたいといったこともあるでしょう。
そのときは「if文」を使い、条件分岐させ、その特定の条件になった場合の処理に「break」と記述することでfor文の繰り返しを止めて、for文より下の処理に移ることができます。
result = []
for i in range(0, 5):
print(i)
if i == 3:
print(f"i == 3...break")
break
else:
result.append(i)
print(result)
実行結果
0
1
2
3
i == 3...break
[0, 1, 2]
この場合、「print(i)」はif文の前にあるため、「i == 3」になっても表示されますが、resultリストへの格納は「if文のelseの後」であるため、「i == 3」の場合はresultリストへの格納は行われません。
複数のfor文からのbreak
それでは次に複数のfor文からのbreakを見ていきます。
ということで複数のfor文をもつプログラムをこんな感じに準備してみました。
result = []
for i in range(0, 3):
for j in range(10, 13):
print(i, j)
result.append([i, j])
print(result)
実行結果
0 10
0 11
0 12
1 10
1 11
1 12
2 10
2 11
2 12
[[0, 10], [0, 11], [0, 12], [1, 10], [1, 11],
[1, 12], [2, 10], [2, 11], [2, 12]]
これで1つ目のfor文で得られる要素が「1」となった場合、全てのfor文から抜けるには一つ目のfor文の先にif文を置き、条件があった場合はbreakとし、条件が合わなかった場合は次のfor文の処理を行うという感じにします。
result = []
for i in range(0, 3):
if i == 1:
break
else:
for j in range(10, 13):
print(i, j)
result.append([i, j])
print(result)
実行結果
0 10
0 11
0 12
[[0, 10], [0, 11], [0, 12]]
次に2つ目のfor文で得られる要素が「11」となったとき、全てのfor文から抜けたいとします。
そのため2つ目のfor文後にif文で条件分岐させ、特定の条件(今回は11)になった時にbreakするとしてみます。
result = []
for i in range(0, 3):
for j in range(10, 13):
print(i, j)
if j == 11:
break
else:
result.append([i, j])
実行結果
0 10
0 11
1 10
1 11
2 10
2 11
[[0, 10], [1, 10], [2, 10]]
2つ目のfor文での要素が「11」になったら全てのfor文から抜けたいので、1回目の「11」、つまり「i == 0」、「j == 11」の時に処理が終了して欲しいのですが、今回はそうなっていません。
そのようにしたい場合、前回紹介したelseを用います。
result = []
for i in range(0, 3):
for j in range(10, 13):
print(i, j)
if j == 11:
break
else:
result.append([i, j])
else:
continue
break
print(result)
実行結果
0 10
0 11
[[0, 10]]
2つ目のfor文がbreakになると、1つ目のfor文の「elseが実行されず」、そのまま「break」にいくため、1つ目のfor文も終了するということです。
これで目的を達成することができました。
次回はネスト(複数の階層)された辞書の作成方法について紹介します。
ではでは今回はこんな感じで。
コメント