在Python中中断嵌套(双)循环

2024-05-15 12:14:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下方法来打破Python中的双循环。

for word1 in buf1:
    find = False
    for word2 in buf2:
        ...
        if res == res1:
            print "BINGO " + word1 + ":" + word2
            find = True
    if find:
        break

有没有更好的方法来打破这种双重循环?


Tags: 方法infalsetrueforifresfind
3条回答

大多数情况下,您可以使用许多方法来创建一个单循环,该循环的功能与双循环相同。

在您的示例中,可以使用itertools.product将代码片段替换为

import itertools
for word1, word2 in itertools.product(buf1, buf2):
    if word1 == word2:
        print "BINGO " + word1 + ":" + word2
        break

其他itertools函数也适用于其他模式。

可能不是你所希望的,但通常在将find设置为True之后,你会希望有一个break

for word1 in buf1: 
    find = False 
    for word2 in buf2: 
        ... 
        if res == res1: 
            print "BINGO " + word1 + ":" + word2 
            find = True 
            break             # <-- break here too
    if find: 
        break 

另一种方法是使用生成器表达式将for压缩到单个循环中

for word1, word2 in ((w1, w2) for w1 in buf1 for w2 in buf2):
    ... 
    if res == res1: 
        print "BINGO " + word1 + ":" + word2
        break 

您也可以考虑使用itertools.product

from itertools import product
for word1, word2 in product(buf1, buf2):
    ... 
    if res == res1: 
        print "BINGO " + word1 + ":" + word2
        break 

Python中中断嵌套循环的推荐方法是。。。例外情况

class Found(Exception): pass
try:
    for i in range(100):
        for j in range(1000):
            for k in range(10000):
               if i + j + k == 777:
                  raise Found
except Found:
    print i, j, k 

相关问题 更多 >