sjx1996
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

方法五:自定义异常

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

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

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

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-02-03
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2021-12-25
  • 2022-12-23
  • 2021-12-10
猜你喜欢
  • 2021-11-29
  • 2021-10-18
  • 2021-10-27
  • 2021-12-25
  • 2021-12-25
  • 2022-12-23
相关资源
相似解决方案