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.