【发布时间】:2018-09-14 06:33:40
【问题描述】:
我正在寻找执行以下操作的 Pythonic 方式:
我有一个键列表和一个对象列表。
对于任何键,都应该对适合该键的第一个对象进行处理。
如果没有对象适合任何键,所以根本没有做任何事情,应该做一些不同的事情。
我按如下方式实现了它,它工作正常:
didSomething = False
for key in keys:
for obj in objects:
if <obj fits to key>:
doSomething(obj, key)
didSomething = True
break
if not didSomething:
doSomethingDifferent()
但通常情况下,如果只有一个 for 循环,则不需要这样一个临时布尔值来检查某事是否已完成。您可以改用 for-else 语句。但这不适用于 2 个 for 循环,是吗?
我觉得应该有更好的方法来做到这一点,但我不明白。你有什么想法还是没有改进?
谢谢你:)
【问题讨论】:
-
for else 的问题在于,您永远不可能从键上的循环中中断,因此您将无法将其用作
do_something_different的信号。所以这看起来很好。 -
您想让
break跳出外循环和内循环吗?如果是这样,那是不可能的(没有一个标志和两个breaks),这是你真正的问题;如果您确实有办法跳出外部循环,那会跳过外部else。另一方面,如果你不希望这样,那么else是没有意义的——你永远不会跳出外循环——所以你的设计有问题,而不是语言的限制。 -
@abarnert:我只想打破内部循环来检查其他键。
-
在这种情况下,您认为
else是什么意思?我不明白你在寻找什么语义。 -
@abarnert:我只是想检查一下,在 for 循环中是否已经完成了某些事情。如果没有,应该做一些不同的事情。如果只有 1 个 for 循环,则 for-else 语句正是这样做的。但我需要2个循环。所以我正在为内部for循环寻找类似外部for-else语句的东西^^
标签: python for-loop if-statement