有没有比抛出异常更容易的方法来跳出嵌套循环?(在Perl中,你可以为每个循环添加标签,并且至少继续执行外层循环。)
for x in range(10): for y in range(10): print x*y if x*y > 50: "break both loops"
即,有没有比以下更好的方法:
class BreakIt(Exception): pass try: for x in range(10): for y in range(10): print x*y if x*y > 50: raise BreakIt except BreakIt: pass
在 Python 中,没有像 Perl 中那样的标记循环的直接等效物,但您可以使用一些不同的技术更干净地跳出嵌套循环。
您可以将嵌套循环放在函数内部,并return在满足条件时退出两个循环。
return
def nested_loop(): for x in range(10): for y in range(10): print(x * y) if x * y > 50: return # Exits the function and, hence, both loops nested_loop()
您可以使用标志变量来指示何时退出外循环。
should_break = False for x in range(10): for y in range(10): print(x * y) if x * y > 50: should_break = True break # Breaks the inner loop if should_break: break # Breaks the outer loop
itertools.product
break
您可以使用itertools.product将嵌套循环展平为单个循环。
from itertools import product for x, y in product(range(10), repeat=2): print(x * y) if x * y > 50: break
while
使用while循环来更加手动地控制流程。
x, y = 0, 0 while x < 10: while y < 10: print(x * y) if x * y > 50: break # Break inner loop y += 1 if x * y > 50: break # Break outer loop x += 1 y = 0 # Reset y for the next iteration
每种方法都有自己的用例,您可以选择最适合您的情况和编码风格的方法。