Python飛び出し多重ループまとめ
15120 ワード
ファイルを読み取り、マッチングする必要があるため、3、4回のループを簡単に書くことができますが、多重ループからどのように飛び出すかが問題になります.
一、for…else
通常の
for...else:elseブロックの文は、forループが正常に実行され、完全に実行された後に実行され、forループがbreakされた場合、elseブロックは実行されません.
1.ループから飛び出す
出力:
2.スキップ2サイクル
出力:
説明: ifが成立しない、すなわち第【3】重forのbreak(1)が実行されていない場合、第【3】重forが実行され、else(1)=>continue(1)=>が次のラウンドの第【2】重forループ(break(2)が実行されていない) が実行開始する. ifが成立し、すなわち第【3】重forのbreak(1)が実行されると、else(1)は実行せず、直接break(2)を実行し、すなわち第【2】重forから飛び出し、次のラウンドの第【1】重forを実行する.だから2つiを出力します.
3.スキップ3サイクル
出力:
ifが成立すればすべてのループから飛び出すことを実現した
解釈:break(1)=>break(2)=>break(3)3つのbreakはすべてのループから直接飛び出します(その中のelseはすべて実行されていません.forが正常に実行されてこそelseが実行されるので、forがbreakによって実行されると、elseは実行されず、直接elseの次の行のbreakになります).
二、関数に包装する
関数のreturnはすべてのループから直接飛び出すことができるので
三、flag大法がよい
四、異常を投げ出す
五、デカルト積
この方法の構想は,単一ループから飛び出すことができる以上,多重ループを単一ループに書き換えることであり,これは
参照先: https://www.zhihu.com/question/37076998
一、for…else
通常の
break
は現在のループからのみ飛び出します.すなわち、1つのループからのみ飛び出します.for... else
は比較的理解しにくく、論理が複雑に見えますfor...else:elseブロックの文は、forループが正常に実行され、完全に実行された後に実行され、forループがbreakされた場合、elseブロックは実行されません.
1.ループから飛び出す
dic = {3, 4}
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
break # 【3】
出力:
i: 3
i: 3
i: 4
i: 4
2.スキップ2サイクル
dic = {3, 4}
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
break # break(1) , 【3】
else: # else(1)
continue # continue(1)
break # break(2)
出力:
i: 3
i: 4
説明:
3.スキップ3サイクル
dic = {3, 4}
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
break # break(1) , 【3】
else: # else(1)
continue # continue(1)
break # break(2)
else: # else(2)
continue # continue(2)
break # break(3)
出力:
i: 3
ifが成立すればすべてのループから飛び出すことを実現した
解釈:break(1)=>break(2)=>break(3)3つのbreakはすべてのループから直接飛び出します(その中のelseはすべて実行されていません.forが正常に実行されてこそelseが実行されるので、forがbreakによって実行されると、elseは実行されず、直接elseの次の行のbreakになります).
二、関数に包装する
関数のreturnはすべてのループから直接飛び出すことができるので
def work():
for i in range(10):
for j in range(10):
if i+j > 5:
return i,j
print work()
三、flag大法がよい
dic = {3, 4}
flag = False
for i in range(0, 5): # 【1】
for j in range(100, 102): # 【2】
for data in dic: # 【3】
if i == data:
print("i:",i)
flag = True
if flag:
break
if flag:
break
四、異常を投げ出す
class Break(Exception):
pass
try:
for i in range(3):
for j in range(3):
for k in range(3):
print(i, j, k)
if i == j == k == 1:
raise Break('break')
except Break as e:
print(e)
五、デカルト積
この方法の構想は,単一ループから飛び出すことができる以上,多重ループを単一ループに書き換えることであり,これは
itertools
のデカルト積関数product
,例えばfrom itertools import product
for i, j, k in product(range(3), range(3), range(3)):
print(i, j, k)
if i == j == k == 1:
print('break')
break
参照先: