Break the nested (double) loop in Python [duplicate]

ⅰ亾dé卋堺 提交于 2019-12-29 11:45:41

问题


I use the following method to break the double loop in Python.

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

Is there a better way to break the double loop?


回答1:


Probably not what you are hoping for, but usually you would want to have a break after setting find to True

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 

Another way is to use a generator expression to squash the for into a single loop

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

You may also consider using itertools.product

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



回答2:


The recommended way in Python for breaking nested loops is... Exception

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 



回答3:


Most times you can use a number of methods to make a single loop that does the same thing as a double loop.

In your example, you can use itertools.product to replace your code snippet with

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

The other itertools functions are good for other patterns too.




回答4:


Refactor using functions so you can return when you find your "bingo".

The proposal to allow explicit breaking out of nested loops has been rejected: http://www.python.org/dev/peps/pep-3136/



来源:https://stackoverflow.com/questions/2597104/break-the-nested-double-loop-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!