for循环用作while循环(python)
我注意到在Python中,可以使用for循环来模拟while循环(我对编码知之甚少)。然后我尝试用两个不同的公式构造两个相同的while循环。在我看来,这里就是这样(是吗?) 其中,a不是最后一步中新索引[1,3]的一部分。 因此有三个问题:for循环用作while循环(python),python,python-2.7,for-loop,while-loop,Python,Python 2.7,For Loop,While Loop,我注意到在Python中,可以使用for循环来模拟while循环(我对编码知之甚少)。然后我尝试用两个不同的公式构造两个相同的while循环。在我看来,这里就是这样(是吗?) 其中,a不是最后一步中新索引[1,3]的一部分。 因此有三个问题: 两个程序#1和#2在开始时是否不同(例如,它们的计算工作量是否不同?) 程序#3中发生了什么(为什么在最后一步中“for a in index:”命令显然被忽略了?),以及for循环通常如何对更新索引中的更改作出反应 是否有关于将for循环用作while循
前两个基本相同,在不同的情况下,它们将运行相同数量的迭代,并将
索引保持在相同的状态。如果将index.append(a+1)
替换为index.append(a)
,则for
循环将永远运行;类似地,如果将index.append(index[-1]+1)
替换为index.append(index[-1])
,则while
循环将永远运行。像这样修改迭代的列表有点令人担忧,但有时这是一种合理的策略
顺便说一句,当你启动for
循环时,会创建一个迭代器,给出索引[0]
,然后是索引[1]
,然后是索引[2]
,等等,直到它到达一个不存在的索引[N]
。这个迭代器不知道也不关心您正在更改列表,因此如果您使列表变长,它将愉快地继续变长
在程序3中,存在一些范围界定的混乱。当您输入for循环时创建的迭代器并不关心您在for循环中重新分配变量index
:它只是在原始列表上不断迭代。当您在开始的几次执行index.append(a+1)
时,会影响原始列表;但是,只要执行index=[1,3]
,index
就不再引用原始列表,因此对它所做的任何操作都不会影响迭代的剩余过程。添加的最后一个值是5
,因为一旦a
到达4
并且a+1
被追加到索引中,index
被删除,不再追加到原始列表中
最后,索引
的重击在for循环之外持续存在:循环完成后,它将具有值[1,3]
。您对python答案或“常规”答案更感兴趣吗?python中没有很好地记录这种行为(仅此而已;讨论在)依赖它会让阅读你的代码的人感到困惑。使用更明确的while
循环。理想情况下,您不应该修改正在迭代的集合的大小。while循环只是检查列表的最后一个值,而不是迭代contentagree with@cricket_007:for循环和while循环是不同的。若你们将反汇编代码,你们会看到循环设置迭代器,而循环并没有。为每个循环创建函数并用模块分解它们。“让我困惑的是,我认为一旦列表索引被更新/更改,for循环将从一开始就重新启动”,但事实并非如此。
# 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)
#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]