假设我有一个for循环:
for i in range(1,10):
if i is 5:
i = 7
Run Code Online (Sandbox Code Playgroud)
i如果它符合某些条件我想改变.我尝试了这个,但没有奏效.我该怎么办呢?
Vol*_*ity 73
对于您的特定示例,这将工作:
for i in range(1, 10):
if i in (5, 6):
continue
Run Code Online (Sandbox Code Playgroud)
但是,你可能会更好地使用while循环:
i = 1
while i < 10:
if i == 5:
i = 7
# other code
i += 1
Run Code Online (Sandbox Code Playgroud)
甲for环分配一个变量(在这种情况下,i在列表/在每个迭代开始迭代)到下一个元素.这意味着无论你在循环内做什么,i都将成为下一个元素.该while循环有没有这样的限制.
tim*_*geb 17
关于为什么问题中的循环不能按预期工作的更多背景知识.
一个循环
for i in iterable:
# some code with i
Run Code Online (Sandbox Code Playgroud)
是基本的速记
iterator = iter(iterable)
while True:
try:
i = next(iterator)
except StopIteration:
break
# some code with i
Run Code Online (Sandbox Code Playgroud)
因此for循环从迭代构造的迭代器中逐一提取值,并自动识别迭代器何时耗尽并停止.
正如你所看到的,在每次迭代while循环我被重新分配,因此价值i,无论您在发出任何其他的重新分配将被覆盖# some code with i的部分.
出于这个原因,forPython中的循环不适合循环变量的永久更改,你应该使用while循环代替,就像在Volatility的答案中已经证明的那样.