在python中修改for循环中的迭代器

modifying iterator in for loop in python

本问题已经有最佳答案,请猛点这里访问。

@ Padraic Cunningham Let me know if you want me to delete the
question.

我是Python的新手。我想跳过一些基于某些条件的迭代器值。这在C语言中很容易,但在Python中,我遇到了困难。

所以请帮助我理解为什么这里的代码循环100次而不是10次。

1
2
3
 for i in range(100):
    print i
    i = i +10

编辑:我知道有一个选项可以更改for循环的步骤大小。但是我对动态地改变迭代器变量很感兴趣,就像我们在C语言中所做的那样。好吧,我明白了,因为在python中循环与在C语言中循环是不同的。简单的方法是使用while循环,我在我的代码中这样做,并且它工作了。谢谢大家!


for循环正在遍历不可迭代的range(100)

修改当前值不会影响ITerable中接下来出现的内容(实际上,您可以拥有任何ITerable;下一个值可能不是数字!).

选项1使用while循环:

1
2
3
i = 0
while i < 100:
    i += 4

选项2,使用范围的内置步骤大小参数:

1
2
 for i in range(0,100,10):
       pass

这个例子可以更清楚地说明为什么您的方法没有多大意义:

1
2
3
for i in [1,2,3,4,5,'cat','fish']:
    i = i + i
    print i

这是完全有效的python代码(定义了字符串加法);修改iterable需要一些非结构化的东西。

有关ITerables如何工作以及如何动态修改它们的详细信息,请参阅此处。


为此,请使用while循环。如果可以更改for循环中的迭代器迭代次数,则更改它不会更改数量。

1
2
3
4
i=0
while i < 100:
    print i
    i = i +10


如果要修改迭代器,可以这样做:

1
2
3
4
iterator= iter(range(100))
for i in iterator:
    print (i)
    for k in range(9): next(iterator)

但没有实际的兴趣!


如果您尝试使用此代码,它应该可以工作。

1
2
for i in range(100)[::10]:
    print i

[::10]的工作方式类似于字符串切片。[第一个开始位置:停止位置:每个循环中要执行的步数]

我没有使用前两个值,所以它们被设置为默认的第一个位置和最后一个位置。我只是告诉它做10步。