vis*_*tor 4 python loops break sentinel
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';
Run Code Online (Sandbox Code Playgroud)
Python 示例:
n = 10
for k in range(n):
if condition: break
if k == n: print("Never broke")
else: print("Broke at", k)
Run Code Online (Sandbox Code Playgroud)
在Python中,我们不知道condition最后一次迭代是否为真,因为在这两种情况下k都是9。
为什么不直接使用range(n + 1)呢?因为在某些情况下,当 k 为 n 时,我们可能会收到“索引超出范围”错误。
一种可能的解决方法是使用如下所示的哨兵值,但有更好的方法吗?
n, flag = 10, True
for k in range(n):
if condition:
flag = False
break
if flag: print("Never broke")
else: print("Broke at", k)
Run Code Online (Sandbox Code Playgroud)
使用for/ else。这就是它的具体用途。
for k in range(n):
if condition:
print("Broke at", k)
break
else:
print("Never broke")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |