我知道這是非常低效的和醜陋的代碼,但如果我有三個for
循環,嵌套對方這樣的裏面像這樣:幾個嵌套的for循環,繼續外循環的下一個迭代,如果內環內的條件爲真
for x in range(0, 10):
for y in range(x+1, 11):
for z in range(y+1, 11):
if ...
我想打破這兩個內部循環,並繼續外循環的下一次迭代如果if
說法是正確的。這可以做到嗎?
我知道這是非常低效的和醜陋的代碼,但如果我有三個for
循環,嵌套對方這樣的裏面像這樣:幾個嵌套的for循環,繼續外循環的下一個迭代,如果內環內的條件爲真
for x in range(0, 10):
for y in range(x+1, 11):
for z in range(y+1, 11):
if ...
我想打破這兩個內部循環,並繼續外循環的下一次迭代如果if
說法是正確的。這可以做到嗎?
檢查各環路後一些變量結束:
for x in range(0, 10):
for y in range(x+1, 11):
for z in range(y+1, 11):
if condition:
variable = True
break
#...
if variable:
break;
#...
n = False
for x in range(0,10):
if n == True:
print(x,y,z)
for y in range(x+1, 11):
if n == True:
break
for z in range(y+1, 11):
if z == 5:
n = True
break
(1, 2, 5)
(2, 2, 5)
(3, 3, 5)
(4, 4, 5)
(5, 5, 5)
(6, 6, 5)
(7, 7, 5)
(8, 8, 5)
(9, 9, 5)
另一種選擇是使用異常,而不是狀態變量:
class BreakException(Exception):
pass
for x in range(0, 10):
try:
for y in range(x+1, 11):
for z in range(y+1, 11):
if True:
raise BreakException
except BreakException:
pass
我想這可能是,如果救助特別有用超過兩個內部循環。
一種可能的解決方案是將兩個內環合併到單獨一個(可與break
被終止):
import itertools
for x in range(10):
for y, z in itertools.combinations(range(x+1, 11), 2):
if condition:
break
AFAIK Python的創始人拒絕添加一個結構來做到這一點,因爲代碼將成爲醜 – wil93
可能的複製[如何擺脫在Python多個循環?(http://stackoverflow.com/questions/189645/how-to-break-out-of-multiple-loops-in-python) – wil93
你可以使用變量來存儲狀態和測試每次你打破它寫/完成循環 – beoliver