[英]Is there an inverse behavior to the “else” in a for-else loop?
我有一個for
循環來測試一個條件。 如果條件從未滿足,我想執行一些代碼。 以下代碼恰恰相反:
a = [1, 2, 3]
for k in a:
if k == 2:
break
else:
print("no match")
如果未達到break
則打印“不匹配”(例如,對於k == 10
的條件)。 是否存在相反的結構,即如果達到break
則運行一些代碼?
我知道我可以做點什么
a = [1, 2, 3]
match = False
for k in a:
if k == 2:
match = True
if match:
print("match")
但正在尋找一個更緊湊的解決方案,沒有標志變量..
注意 :我現在從答案中意識到我沒有說清楚我想在for循環之外移動“匹配”代碼。 它會相當大,我想避免將它隱藏在for循環中(因此標志變量的想法)
如果您將條件置於函數或理解中,則可以使用any
關鍵字以非常pythonic的方式完成此操作。
if not any(k == 2 for k in a):
print 'no match'
如果要將條件移動到返回布爾值的函數,則可以概括為:
def f(x):
return x == 2
if not any(f(k) for k in a):
print 'no match'
當然。 在break
之前把它放好。
a = [1, 2, 3]
for k in a:
if k == 2:
print("found") # HERE
break
else:
print("no match")
為什么不簡單:
a = [1, 2, 3]
for k in a:
if k == 2:
print("match")
break
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.