如何在Python中使用break跳出多层循环

Python018

如何在Python中使用break跳出多层循环,第1张

我又有些忍不住要说了……你们学python是从来不看官方文档,只是跟着某某某中文教程一路撸下去的么?

Python的循环体自己就有else分支!

Python的循环体自己就有else分支!

Python的循环体自己就有else分支!

不只是if有,while和for都有else分支。循环体的else分支触发条件是循环正常结束。如果循环内被break跳出,就不执行else。所以这个逻辑是:如果循环内break了,不触发else,则执行下一句外层循环中的break;如果正常结束,执行else分支里的continue,直接跳转到外层循环的下一轮,跳过了第二个break。

python中常用的两种退出循环方式,break和continue 举个例子更直接:

1、以break方式退出循环:当某些条件成立,退出整个循环i = 1

# 例:吃5个苹果--循环:吃完第3个吃饱了,第4个和第5个不吃了(不执行--==4 或 》3)

while i <= 5:

# 条件:如果吃到第4或>3 打印吃饱了不吃了

if i == 4:

print('吃饱了,不吃了')

break

print(f'吃了第{i}个苹果')

i += 1

2、以continue方式退出循环:当条件成立,退出当前一次循环,继而执行下一次循环

# 例:吃5个苹果--循环:吃到第3个吃出一个虫子,第3个不吃了,继续吃第4和第5个

i = 1

while i <= 5:

# 条件

if i == 3:

print('吃出一个虫子,这个苹果不吃了')

# 如果使用continue,在continue之前一定要修改计数器,否则进入死循环

i += 1

continue

print('吃了第{i}个苹果')

i += 1

扩展:

while和for循环都可以配合else使用:

else下方缩进的代码含义:当循环正常结束后执行的代码

break终止循环不会执行else下方缩进的代码

continue退出循环的方式执行else下方缩进的代码

事实上,Python的标准语法是不支持跳出多重循环的,所以只能利用一些技巧,大概的思路有:写成函数、利用笛卡尔积、利用调试。

写成函数

在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环,例如

def work():for i in range(10):for j in range(10):if i+j >5:return i,jprint work()

利用笛卡尔积

这种方法的思路就是,既然可以跳出单循环,我就将多重循环改写为单循环,这可以利用itertools中的笛卡尔积函数product,例如

from itertools import productfor i,j in product(range(10), range(10)):if i+j >5:print i,jbreak

利用调试模式

笛卡尔积的方式很巧妙,也很简洁,但它只能用于每次循环的集合都是独立的情形,假如每层循环都与前一层紧密相关,就不能用这种技巧了。这时候可以用第一种方法,将它写成函数,另外,还可以利用调试模式。这个利用了调试模式中,只要出现报错就退出的原理,它伪装了一个错误出来。

class Found(Exception):passtry:for i in range(10):for j in range(i): #第二重循环跟第一重有关if i + j >5:raise Foundexcept Found:print i, j