Python中是否有一种优雅的方法来检测中断条件是在最后一次迭代中使用的还是根本没有使用的?
C++示例:

int k, n = 10;
for (k = 0; k < n; k++)
    if (condition) break;

if (k == n) cout << "Never broke\n";
else        cout << "Broke at " << k << '\n';

Python示例:
n = 10
for k in range(n):
    if condition: break

if k == n: print("Never broke")
else:      print("Broke at", k)

在Python中,我们不知道在最后一次迭代中condition是否为真,因为在这两种情况下k都是9。
为什么不直接使用range(n + 1)?因为在某些上下文中,当k为n时,可能会出现“索引超出范围”错误。
一种可能的解决方法是使用如下所示的sentinel值,但是否有更好的方法?
n, flag = 10, True
for k in range(n):
    if condition:
        flag = False
        break

if flag: print("Never broke")
else:    print("Broke at", k)

最佳答案

使用for/else。这就是它的目的。

for k in range(n):
    if condition:
       print("Broke at", k)
       break
else:
    print("Never broke")

关于python - 检查是否触发了中断条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47784197/

10-16 23:08