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

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


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 productfor word1, word2 in product(buf1, buf2):    ...     if res == res1:         print "BINGO " + word1 + ":" + word2        break 


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

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


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 itertoolsfor 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.