2024-04-26 18:51:28 发布
网友
假设我有一个for循环:
for i in range(1,10): if i is 5: i = 7
如果满足某些条件,我想更改i。我试过但没成功。 我该怎么做?
i
关于为什么问题中的循环不能按预期工作的背景知识。
循环
for i in iterable: # some code with i
基本上是
iterator = iter(iterable) while True: try: i = next(iterator) except StopIteration: break # some code with i
因此for循环从iterable一个接一个构造的迭代器中提取值,并在迭代器耗尽并停止时自动识别。
for
如您所见,在while循环的每个迭代中,我都被重新分配,因此无论您在# some code with i部分中发出任何其他重新分配,都将覆盖i的值。
while
# some code with i
由于这个原因,Python中的for循环不适合对循环变量进行永久性更改,您应该使用while循环,这已经在volatile的答案中得到了证明。
这个概念在C世界中并不罕见,但是如果可能的话应该避免。 尽管如此,这是我实现它的方式,我觉得很清楚发生了什么。然后,您可以将跳转的逻辑放到循环中任何地方的索引中,读者将知道要注意skip变量,而将i=7嵌入到很深的地方则很容易被忽略:
skip = 0 for i in range(1,10): if skip: skip -= 1 continue if i=5: skip = 2 <other stuff>
对于您的特定示例,这将起作用:
for i in range(1, 10): if i in (5, 6): continue
不过,使用while循环可能会更好:
i = 1 while i < 10: if i == 5: i = 7 # other code i += 1
在每次迭代开始时,for循环将变量(在本例中为i)分配给list/iterable中的下一个元素。这意味着无论在循环中做什么,i都将成为下一个元素。while循环没有这样的限制。
关于为什么问题中的循环不能按预期工作的背景知识。
循环
基本上是
因此
for
循环从iterable一个接一个构造的迭代器中提取值,并在迭代器耗尽并停止时自动识别。如您所见,在
while
循环的每个迭代中,我都被重新分配,因此无论您在# some code with i
部分中发出任何其他重新分配,都将覆盖i
的值。由于这个原因,Python中的
for
循环不适合对循环变量进行永久性更改,您应该使用while
循环,这已经在volatile的答案中得到了证明。这个概念在C世界中并不罕见,但是如果可能的话应该避免。 尽管如此,这是我实现它的方式,我觉得很清楚发生了什么。然后,您可以将跳转的逻辑放到循环中任何地方的索引中,读者将知道要注意skip变量,而将i=7嵌入到很深的地方则很容易被忽略:
对于您的特定示例,这将起作用:
不过,使用
while
循环可能会更好:在每次迭代开始时,
for
循环将变量(在本例中为i
)分配给list/iterable中的下一个元素。这意味着无论在循环中做什么,i
都将成为下一个元素。while
循环没有这样的限制。相关问题 更多 >
编程相关推荐