如何在 Python 中跳出多层嵌套循环

Posted on Wed, 25 Dec 2024 16:10:38 +0800 by LiangMingJian


需求

这里有一个多层的嵌套循环:

for x in range(5):
    for y in range(6):
        for z in range(8):
            pass

此时,用户要求在最里面一层循环达到一定条件后,直接结束所有循环,不执行完所有循环。

方法一:设置 Flag

在循环外面添加 Flag 变量,然后在循环时变更变量,通过判定 Flag 的值来跳出循环。

这种做法的缺点是,每层循环都需要判断,都需要执行 break 跳出。

flag = False
for x in range(5):
    for y in range(6):
        for z in range(8):
            if x == 1 and y == 2 and z == 3:
                flag = True
                break
        if flag:
            break
    if flag:
        break

方法二:通过主动抛出异常跳出循环

在循环外层嵌套一个 try ... except ... 语句,然后循环内部通过 raise 主动抛出异常来结束所有循环。

try:
    for x in range(5):
        for y in range(6):
            for z in range(8):
                if x == 1 and y == 2 and z == 3:
                    raise StopIteration
except StopIteration:
    pass

方法三:使用 for … else …

在 Python 中,for ... else ... 语句的 else 只有在循环体正常执行完成且没有中断的时候才会执行,当循环体被 break,则 else 后面的代码会直接跳过,继续执行后续代码。

正如下面代码,最里层循环如果正常执行,则会触发 else 后面的语句,然后执行 continue 直接进行下一次循环,当被 break 时,则 else 不会被执行,continue 不会被执行,外层的 break 将被执行。

for x in range(5):
    for y in range(6):
        for z in range(8):
            if x == 1 and y == 2 and z == 3:
                break
        else:
            continue
        break
    else:
        continue
    break

方法四:封装为函数,使用 return 跳出循环

将多层嵌套循环封装在一个函数内,然后通过 return 直接结束函数运行,从而跳出嵌套循环。

 def loop():
    for x in range(5):
        for y in range(6):
            for z in range(8):
                if x == 1 and y == 2 and z == 3:
                    return 0
    return 1

loop()