2016-11-15 65 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)