簡體   English   中英

for-else循環中的“else”是否存在反向行為?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM