如何跳出多重嵌套循环

课下答疑 2020-10-7

Python目前暂时不支持标签语句,在其他语言中可以使用标签语句定义从内层循环中直接跳转到指定标签位置,从而快速结束多重嵌套的循环结构。不过,在Python中可以配合使用continue和break语句来实现。例如:

for i in range(10):          # 循环2
    for j in range(10):      # 循环1
        print(i, j)
        if i == 2 and j == 2:
            break            # break1
    else:
        continue
    break                    # break2

循环1为for-else模式。循环1的结果只会有2种情况:

  1. 循环结束,执行else部分。
  2. 符合if判断条件,循环中断,执行if下的break。

那么,如果循环1完成一个循环,那么就继续进行循环2的下一个循环,如果循环1的循环中断,那么循环2也必须要中断,跳出整个嵌套循环。也就是说,循环1的情况2,循环break中断之后,循环2也必须break,因此与循环1同级,在循环1之后执行break2。循环1的情况1,循环结束,此时不能执行循环2的break2,因此在else下执行continue,在循环1结束后会执行else部分的continue,这个continue是对循环2起作用,因此会跳过执行break2,进行循环2的下一轮循环。

跳出多重嵌套循环的方法还有很多,如利用try...except自定义异常跳出,如下所示。但是简单的利用continue和break的配合就能实现,在学习循环结构的语句时,研究这个话题,会更加深刻理解各种循环语句。

try:
    for i in range(10):
        for j in range(10):
            print(i, j)
            if i == 2 and j == 2:
                raise ValueError("找到值了,主动结束嵌套循环")
except:
    pass