68

你怎么能continue在 Python 中说两个嵌套循环的父循环?

for a in b:
    for c in d:
        for e in f:
            if somecondition:
                <continue the for a in b loop?>

我知道在大多数情况下您可以避免这种情况,但可以在 Python 中完成吗?

4

7 回答 7

61
  1. 从内部循环中断(如果之后没有其他内容)
  2. 将外循环的主体放入函数中并从函数中返回
  3. 引发异常并在外层捕获它
  4. 设置一个标志,从内部循环中中断并在外部级别对其进行测试。
  5. 重构代码,这样您就不必再这样做了。

我每次都会带5个。

于 2013-02-12T09:53:48.960 回答
25

这里有一堆hacky方法来做到这一点:

  1. 创建局部函数

    for a in b:
        def doWork():
            for c in d:
                for e in f:
                    if somecondition:
                        return # <continue the for a in b loop?>
        doWork()
    

    更好的选择是将 doWork 移到其他地方并将其状态作为参数传递。

  2. 使用例外

    class StopLookingForThings(Exception): pass
    
    for a in b:
        try:
            for c in d:
                for e in f:
                    if somecondition:
                        raise StopLookingForThings()
        except StopLookingForThings:
            pass
    
于 2013-02-12T10:05:54.980 回答
12
from itertools import product
for a in b:
    for c, e in product(d, f):
        if somecondition:
            break
于 2013-02-12T10:07:51.527 回答
11

您使用break打破内部循环并继续父级

for a in b:
    for c in d:
        if somecondition:
            break # go back to parent loop
于 2013-02-12T09:53:40.520 回答
1

使用布尔标志

problem = False
for a in b:
  for c in d:
    if problem:
      continue
    for e in f:
        if somecondition:
            problem = True
于 2019-03-11T15:26:26.330 回答
1

在这里查看所有答案,这与我的做法完全不同\n 任务:如果嵌套循环中的 if 条件为真,则继续执行 while 循环

chars = 'loop|ing'
x,i=10,0
while x>i:
    jump = False
    for a in chars:
      if(a = '|'): jump = True
    if(jump==True): continue
于 2020-09-17T03:21:15.073 回答
0
lista = ["hello1", "hello2" , "world"]

for index,word in enumerate(lista):
    found = False
    for i in range(1,3):
        if word == "hello"+str(i):
            found = True
            break
        print(index)
    if found == True:
        continue
    if word == "world":
        continue
    print(index)


    

现在打印了什么:

>> 1
>> 2
>> 2

这意味着单词 no.1 ( index = 0 ) 首先出现(在 continue 语句之前无法打印某些内容)。单词 no.2 ( index = 1 ) 出现在第二位 (单词 "hello1" 被打印出来但不是其余的) 而单词 no.3 出现在第三位是什么意思是单词 "hello1" 和 "hello2" 设法打印在 for 循环到达第三个单词之前打印。

总而言之,它只是使用 found = False / True 布尔值和 break 语句。

希望能帮助到你!

于 2022-02-07T19:06:14.620 回答