Python “是否存在与”相反的行为;否则";在for-else循环中?

Python “是否存在与”相反的行为;否则";在for-else循环中?,python,Python,我有一个for循环,用于测试条件。如果条件从未满足,我想执行一些代码。以下代码的作用正好相反: a = [1, 2, 3] for k in a: if k == 2: break else: print("no match") 如果未达到中断,则打印“不匹配”(例如,对于k==10这样的条件)。是否有相反的构造,即,如果达到中断,则运行一些代码 我知道我可以做像这样的事情 a = [1, 2, 3] match = False for k in a:

我有一个
for
循环,用于测试条件。如果条件从未满足,我想执行一些代码。以下代码的作用正好相反:

a = [1, 2, 3]
for k in a:
    if k == 2:
        break
else:
    print("no match")
如果未达到
中断
,则打印“不匹配”(例如,对于
k==10这样的条件)。是否有相反的构造,即,如果达到
中断
,则运行一些代码

我知道我可以做像这样的事情

a = [1, 2, 3]
match = False
for k in a:
    if k == 2:
        match = True
if match:
    print("match")
但是我们正在寻找一个更紧凑的解决方案,没有flag变量


注意:我现在从答案中意识到,我没有明确表示我想将“匹配”代码移出for循环。它将相当大,我希望避免将其隐藏在for循环中(因此使用flag变量)

当然。只要把它放在
中断之前

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

如果你把你的条件放在一个函数或理解中,你可以使用
any
关键字以一种非常通俗的方式来完成这项工作

如果要将条件移动到一个返回布尔值的函数,可以将其概括为:

def f(x):
    return x == 2

if not any(f(k) for k in a):
    print 'no match'

谢谢你的回答-我意识到我没有明确表示我想让代码在循环之外(它会很大)。我更新了问题。如果你想这样做,请使用标志。这不是一个常见的用例,它没有语言功能。@WoJ看看Mike的答案,特别是第二个片段:循环的主体将位于
f
,而底部条件是完全分开的。@Kroltan:是的,这正是我要找的(接受的答案)谢谢你的回答-我意识到我没有明确表示我想让代码在循环之外(它会很大)。我更新了这个问题。谢谢-这正是我想要的(尽管方式完全不同):如果没有匹配项,在启动代码之前检查条件的紧凑方式。
def f(x):
    return x == 2

if not any(f(k) for k in a):
    print 'no match'