小能豆

跳出嵌套循环

javascript

有没有比抛出异常更容易的方法来跳出嵌套循环?(在Perl中,你可以为每个循环添加标签,并且至少继续执行外层循环。)

for x in range(10):
    for y in range(10):
        print x*y
        if x*y > 50:
            "break both loops"

即,有没有比以下更好的方法:

class BreakIt(Exception): pass

try:
    for x in range(10):
        for y in range(10):
            print x*y
            if x*y > 50:
                raise BreakIt
except BreakIt:
    pass

阅读 40

收藏
2024-09-09

共1个答案

小能豆

在 Python 中,没有像 Perl 中那样的标记循环的直接等效物,但您可以使用一些不同的技术更干净地跳出嵌套循环。

选项 1:使用函数

您可以将嵌套循环放在函数内部,并return在满足条件时退出两个循环。

def nested_loop():
    for x in range(10):
        for y in range(10):
            print(x * y)
            if x * y > 50:
                return  # Exits the function and, hence, both loops

nested_loop()

选项 2:使用标志变量

您可以使用标志变量来指示何时退出外循环。

should_break = False
for x in range(10):
    for y in range(10):
        print(x * y)
        if x * y > 50:
            should_break = True
            break  # Breaks the inner loop
    if should_break:
        break  # Breaks the outer loop

选项 3:itertools.product使用break

您可以使用itertools.product将嵌套循环展平为单个循环。

from itertools import product

for x, y in product(range(10), repeat=2):
    print(x * y)
    if x * y > 50:
        break

选项 4:使用while多个break语句

使用while循环来更加手动地控制流程。

x, y = 0, 0
while x < 10:
    while y < 10:
        print(x * y)
        if x * y > 50:
            break  # Break inner loop
        y += 1
    if x * y > 50:
        break  # Break outer loop
    x += 1
    y = 0  # Reset y for the next iteration

使用哪种方法?

  • 如果您喜欢干净的代码并且可以以可重用的方式封装逻辑,请使用函数。
  • 如果您需要坚持嵌套循环的结构但想要控制何时中断,请使用标志变量。
  • 使用itertools.product简洁的方法,避免嵌套。
  • while*如果您需要对循环迭代进行更多手动控制,**请使用循环。*

每种方法都有自己的用例,您可以选择最适合您的情况和编码风格的方法。

2024-09-09