我使用以下方法打破Python中的雙循環。在Python中打破嵌套(雙)循環
for word1 in buf1:
find = False
for word2 in buf2:
...
if res == res1:
print "BINGO " + word1 + ":" + word2
find = True
if find:
break
有沒有更好的方法來打破雙循環?
我使用以下方法打破Python中的雙循環。在Python中打破嵌套(雙)循環
for word1 in buf1:
find = False
for word2 in buf2:
...
if res == res1:
print "BINGO " + word1 + ":" + word2
find = True
if find:
break
有沒有更好的方法來打破雙循環?
你希望也許不是什麼,但通常你會希望有一個break
設置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/
這應該是上投答案海事組織。 – 2018-01-14 18:04:00
大多數時候,你可以用多種方法使單個環路,做同樣的事,作爲一個雙循環。
在您的例子,你可以使用itertools.product與
import itertools
for word1, word2 in itertools.product(buf1, buf2):
if word1 == word2:
print "BINGO " + word1 + ":" + word2
break
更換您的代碼段的其他itertools功能有利於其他模式了。
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
+1簡單而優雅! – 2012-08-13 23:06:54
itertools.product()是一個很好的方法。 – 2016-02-27 00:22:22
我今天學到了一些東西:) – wonzbak 2017-06-12 12:44:51