在不执行子顺序代码的情况下中断嵌套循环

She*_*jie 2 python for-loop

我试图找出如何打破嵌套for循环来实现以下目的:

  1. 当它突破嵌套的for循环时,它仍然在外部for循环中
  2. 当它突破嵌套的for循环时,它不再执行剩余的代码,在本例中是最后一行.
def for_loop_flow():
    for a in range(0, 2):
        print "a = %s" % a
        for b in range(3, 5):
            print "b = %s" % b
            if b == 4:
                print "XXXXXXXXbreak"
                break
        print("big piece of logic here, when nested for loop breaks, I "
              "don't wanna be here")
Run Code Online (Sandbox Code Playgroud)

现在,我只能想到使用一个标志:

def for_loop_flow():
    for a in range(0, 2):
        print "a = %s" % a
        flag = True
        for b in range(3, 5):
            print "b = %s" % b
            if b == 4:
                print "XXXXXXXXbreak"
                flag = False
                break
        if flag == True:
            print("big piece of logic here, when nested for loop breaks, I "
                  "don't wanna be here")
Run Code Online (Sandbox Code Playgroud)

这样做有更好的方法吗?

Sea*_*ira 8

任何for与一个环break和一个标志变量可以表示为一个for带有else子句.所以在你的情况下,你可以摆脱旗帜并使用:

for a in range(2):
    print "a = {:d}".format(a)
    for b in range(3, 5):
        print "b = {:d}".format(b)
        if b == 4:
            print "BREAK!"
            break
    else:
        print "Only run if no break in inner loop"
Run Code Online (Sandbox Code Playgroud)

请注意,这也适用于while:

while check_if_still_true():
    do_work()
    if shall_we_break():
        break
else:
    we_exited_because_check_returned_false()
Run Code Online (Sandbox Code Playgroud)