【发布时间】:2018-07-24 11:49:43
【问题描述】:
我注意到在 Python 中可以使用 for 循环来模拟 while 循环(我对编码知之甚少)。然后,我尝试使用两种不同的公式构建两个相同的 while 循环。在我看来,这里就是这种情况(是吗?)
# for-loop formulation
index = [0]
for a in index:
if a < 6:
index.append(a + 1)
# while-loop formulation
index = [0]
while index[-1] < 6:
index.append(index[-1] + 1)
让我感到困惑的是,我认为一旦更新/更改了列表索引,for 循环就会从头开始重新启动,因为列表在任何周期都可能发生巨大变化。例如,如果你运行
#3
index = [0]
for a in index:
print a
if a < 6:
index.append(a+1)
if a > 3:
index = [1, 3]
print index
你得到输出
0
[0, 1]
1
[0, 1, 2]
2
[0, 1, 2, 3]
3
[0, 1, 2, 3, 4]
4
[1, 3]
5
[1, 3]
其中 a 不是最后一步中新索引 [1, 3] 的一部分。 因此三个问题:
- 一开始的 #1 和 #2 两个程序是否不同(例如,它们的计算量是否不同?)
- 程序#3 中发生了什么(为什么'for a in index:' 命令在最后一步显然被忽略了?),以及for 循环一般如何对更新索引的变化作出反应?李>
- 是否有关于将 for 循环用作 while 循环的一般指南(我发现它在特定情况下很有帮助,因此我想知道这方面的一些一般提示)。
【问题讨论】:
-
您对 python 答案还是“一般”答案更感兴趣?
-
这种行为在 Python 中没有得到很好的记录(有a vague note about it,仅此而已;在bugs.python.org/issue32767 进行讨论)并且依赖它会使阅读您的代码的人感到困惑。使用更明确的
while循环。 -
理想情况下,您不应修改被迭代的集合的大小。 while 循环只检查列表的最后一个值,而不是遍历内容
-
同意@cricket_007:for-loop 和 while-loop 是不同的。如果你要反汇编代码,你会看到 for 循环设置了迭代器,而 while 循环没有。为每个循环创建函数并使用
dis模块将它们反汇编。 -
“让我感到困惑的是,我认为一旦更新/更改了列表索引,for-loop 就会从头开始”它不会。
标签: python python-2.7 for-loop while-loop