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

时间:2014-11-22 16:43:26

标签: python

我有一个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循环中(因此是标志变量的想法)

3 个答案:

答案 0 :(得分:2)

如果您将条件置于函数或理解之内,则可以使用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'

答案 1 :(得分:1)

不确定。只需将其放在break

之前
a = [1, 2, 3]
for k in a:
    if k == 2:
        print("found")    # HERE
        break
else:
    print("no match")

答案 2 :(得分:1)

为什么不简单:

a = [1, 2, 3]
for k in a:
    if k == 2:
        print("match")
        break