2016-11-15 69 views
2

這些循環組之間有什麼區別?如何突破python中的嵌套循環?

for i in range(0,5): 
    print i,'i' 
    for x in range(0,4): 
     print x,'x' 
    break 

for i in range(0,5): 
    print i,'i' 
    for x in range(0,4): 
     print x,'x' 
     break 

什麼是break語句的範圍?

+1

請編輯您的問題,並使用工具格式化你的代碼。 – Soviut

回答

8

A break只會突破它內部的最內層循環。您的第一個示例從外部循環中斷,第二個示例僅打破內部循環。

要打破多個循環,您需要使用變量來跟蹤您是否試圖退出並在每次發生父循環時檢查它。

is_looping = True 
for i in range(5): # outer loop 
    for x in range(4): # inner loop 
     if x == 2: 
      is_looping = False 
      break # break out of the inner loop 

    if not is_looping: 
     break # break out of outer loop 
0

在第一個代碼中,'break'屬於外部'for'。因此內部的'for'循環將被執行而沒有任何中斷,而外部的'for'將只執行一次。

在第二個代碼中,'break'屬於'for'的內部。所以外部'for'將被執行而不會有任何中斷,而內部'for'將在每次迭代中只執行一次。

區別在於縮進。

2

在Python中,您可以爲循環編寫一個else子句,該循環在循環中不發生中斷時執行,或者循環自然終止時執行。 有時你可以使用它來打破多個循環。

for i in some_range: 
    for j in some_other_range: 
     if need_break(i, j): 
      break 
    else: 
     continue 
    break # break happens in inner loop, break outer loop too. 
0

你也可以用一個例外做到這一點,是這樣的:

class ForLoopBreak(Exception): 
    pass 

try: 
    for i in range(5): 
     for j in range(5): 
      print "({}, {})".format(i, j) 
      if i == 1 and j == 1: 
       # Break out of both for loops for this case 
       raise ForLoopBreak() 

except ForLoopBreak: 
    pass 

# Output 
(0, 0) 
(0, 1) 
(0, 2) 
(0, 3) 
(0, 4) 
(1, 0) 
(1, 1)