python break跳出外层_python跳出多层循环的几种方法

for a in range(10):

for b in range(20):

if something(a, b):

# Break the inner loop...

break

经常会碰到两层甚至多层循环的情况,很多时候需要跳出内层循环到最外面。但是break只能跳出一层循环。

虽然goto被广为诟病,但是不得不说这是跳出多层循环的一种法子。然而python自带的没有goto语句。。。碰到了N次之后总结了几种跳出多层循环的方法:

方法一:利用函数

def work(): #定义函数

for i in range(5):

print("i=", i)

for j in range(5):

print("--j=", j)

for k in range(5):

if k==2:

return i,j,k

print (work())

return是直接返回的,也算是一种变相跳出多层循环的法子,把多层循环封装成函数。

方法二:立flag

break_flag=False

for i in range(10):

print("grandfather")

for j in range(10):

print("father")

for k in range(10):

print("son")

if k==3:

break_flag=True

break #跳出孙子层循环,继续向下运行

if break_flag==True:

break #满足条件,运行break跳出爸爸层循环,向下运行

if break_flag==True:

break #满足条件,运行break跳出爷爷层循环,结束全部循环,向下运行

print("keep going...")

不得不说这样代码太臃肿了,而且如果逻辑稍微复杂一些,可能会需要不只一个flag,反正个人是不喜欢这种法子。

PS:百度到的某些博客上说的利用while循环,本质上也是立flag,而且多层for改成多层while也是很考验逻辑的,个人不推荐。

方法三:for...else

不知道是不是python独有的语法,for循环执行完毕,才执行else语句,若for循环中途被break,else语句不执行

所以可以利用这一点跳出多层循环:

for i in range(10):

for j in range(10):

Something():#内层循环要执行的操作

break

else:

continue  #如果内层for循环正常执行完毕,continue

break

关于for...else的用法,参考:https://www.cnblogs.com/dspace/p/6622799.html

方法四:goto模块

你没看错,python真的有goto模块,大概是广为诟病的goto还是有那么点用的吧

from goto import with_goto

@with_goto

def range(start, stop):

for i in range(10):

for j in range(10):

something()

if j == stop;

goto .end;

label .end

方法五:自定义异常

classFound(Exception):pass

try:for i in range(10):for j in range(i): #第二重循环跟第一重有关

if i + j > 5:raiseFoundexceptFound:print i, j

老实说这种方法第一次看到我也被震惊到了。还有这种操作...

更多奇技淫巧,详见 https://spaces.ac.cn/archives/4159

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值