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'