几个嵌套的'for'循环,如果内循环内的条件为真,则继续外循环的下一次迭代

Several nested 'for' loops, continue to next iteration of outer loop if condition inside inner loop is true

我知道这是非常低效和丑陋的代码,但如果我有三个 for 循环,彼此嵌套,例如:

for x in range(0, 10):
    for y in range(x+1, 11):
       for z in range(y+1, 11):
           if ...

如果 if 语句为真,我想打破两个内部循环并继续进行外部循环的下一次迭代。这能做到吗?

每次循环结束后检查一些变量:

for x in range(0, 10):
    for y in range(x+1, 11):
        for z in range(y+1, 11):
            if condition:
                variable = True
                break
            #...
        if variable:
            break;
        #...
n = False
for x in range(0,10):
    if n == True:
        print(x,y,z)
    for y in range(x+1, 11):
        if n == True:
            break
        for z in range(y+1, 11):
            if z == 5:
                n = True
                break

(1, 2, 5)
(2, 2, 5)
(3, 3, 5)
(4, 4, 5)
(5, 5, 5)
(6, 6, 5)
(7, 7, 5)
(8, 8, 5)
(9, 9, 5)

另一种选择是使用异常而不是状态变量:

class BreakException(Exception):
    pass

for x in range(0, 10):
    try:
        for y in range(x+1, 11):
           for z in range(y+1, 11):
               if True:
                   raise BreakException
    except BreakException:
        pass

我想这在摆脱两个以上的内部循环时会特别有用。

一种可能的解决方案是将两个内部循环合并为一个(可以用 break 终止):

import itertools

for x in range(10):
    for y, z in itertools.combinations(range(x+1, 11), 2):
        if condition:
            break

为内部循环定义一个函数,并在条件为真时简单地return。

def process_inner(x):
    for y in range(x+1, 11):
       for z in range(y+1, 11):
           if condition:
               return
           # ...


for x in range(0, 10):
    process_inner(x)

我现在认为这是比滥用异常或引入控制流变量更干净的解决方案。

在抽象示例中并不明显,但一些循环应该中止而其他循环不应该中止的事实表明这些循环具有非常不同的目的。在这种情况下,将它们分解为单独的函数将比一堆嵌套循环更清楚地传达这种差异。