2016-01-11 43 views
5

我知道這是非常低效的和醜陋的代碼,但如果我有三個for循環,嵌套對方這樣的裏面像這樣:幾個嵌套的for循環,繼續外循環的下一個迭代,如果內環內的條件爲真

for x in range(0, 10): 
    for y in range(x+1, 11): 
     for z in range(y+1, 11): 
      if ... 

我想打破這兩個內部循環,並繼續外循環的下一次迭代如果if說法是正確的。這可以做到嗎?

+0

AFAIK Python的創始人拒絕添加一個結構來做到這一點,因爲代碼將成爲醜 – wil93

+3

可能的複製[如何擺脫在Python多個循環?(http://stackoverflow.com/questions/189645/how-to-break-out-of-multiple-loops-in-python) – wil93

+1

你可以使用變量來存儲狀態和測試每次你打破它寫/完成循環 – beoliver

回答

4

檢查各環路後一些變量結束:

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; 
     #... 
1
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) 
2

另一種選擇是使用異常,而不是狀態變量:

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 

我想這可能是,如果救助特別有用超過兩個內部循環。

0

一種可能的解決方案是將兩個內環合併到單獨一個(可與break被終止):

import itertools 

for x in range(10): 
    for y, z in itertools.combinations(range(x+1, 11), 2): 
     if condition: 
      break