Вероятно, это не то, на что вы надеетесь, но обычно вам нужно иметь перерыв
после установки find
на 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
Другой способ - использовать генератор выражение для сжатия 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
Рефакторинг с использованием функций, чтобы вы могли вернуться, когда найдете свое «бинго».
Предложение разрешить явное прерывание вложенных циклов было отклонено: http://www.python.org/dev/peps/pep-3136/
В большинстве случаев вы можете использовать несколько методы для создания одиночного цикла, который делает то же самое, что и двойной цикл.
В вашем примере вы можете использовать itertools.product , чтобы заменить фрагмент кода на
import itertools
for word1, word2 in itertools.product(buf1, buf2):
if word1 == word2:
print "BINGO " + word1 + ":" + word2
break
. Другие функции itertools также подходят для других шаблонов.