如何在Python中更改for循环的索引?

2024-04-26 18:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个for循环:

for i in range(1,10):
    if i is 5:
        i = 7

如果满足某些条件,我想更改i。我试过但没成功。 我该怎么做?


Tags: inforifisrange条件
3条回答

关于为什么问题中的循环不能按预期工作的背景知识。

循环

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一个接一个构造的迭代器中提取值,并在迭代器耗尽并停止时自动识别。

如您所见,在while循环的每个迭代中,我都被重新分配,因此无论您在# some code with i部分中发出任何其他重新分配,都将覆盖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循环没有这样的限制。

相关问题 更多 >