Python上最好的方法是确定在最后一个元素迭代中是否由于条件而发生中断?

Oeu*_*ano 1 c python for-loop

我看到了一些类似的问题,但似乎都没有解决这个具体的问题所以我不知道我是否忽略了一些东西,因为我是Python的新手.

以下是问题的背景:

for i in range(10):
    if something_happens(i):
        break
if(something_happened_on_last_position()):
    # do something            
Run Code Online (Sandbox Code Playgroud)

从我的C背景来看,如果我有一个for(i = 0; i <10; i ++)做一个中断同样的事情,那么i的值将是10,如果没有发生中断则不是9,而9如果它发生在最后一个元素上.这意味着something_happened_on_last_position()方法可以使用这个事实来区分这两个事件.然而我在python上注意到的是,即使在没有中断运行成功的循环之后,我也会停在9上.

虽然区分两者可能就像在旗帜上添加变量一样简单,但我从不喜欢C上的这种用法.所以我很好奇,是否还有另一种方法可以做到这一点还是我在这里错过了一些愚蠢的东西?

注意我不能只使用范围(11),因为这会运行something_happens(10).它在C上是不同的,因为'10'会在for循环的条件下失败并且永远不会执行something_happens(10)(因为我们从索引0开始,这里Python和C上的值都是10).

我使用这些方法只是为了说明我感兴趣的代码块,它们是一组与解释问题无关的其他条件.

谢谢!

f p*_*f p 10

它以另一种方式工作:

for i in range(10):
    if something_happens(i):
        break
else: # no break in any position
    do whatever
Run Code Online (Sandbox Code Playgroud)


Ned*_*der 6

这正是循环中的else子句for:

for i in range(10):
    if something_happens(i):
        break
else:
    # Never hit the break
Run Code Online (Sandbox Code Playgroud)

else条款让许多人感到困惑,如果你在循环中执行,那么将其视为与所有这些相关的其他条款.else如果break从未这样做,则该条款发生.关于这个的更多信息: For/else