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