在迭代期间为循环迭代器设置python

时间:2015-08-12 22:20:59

标签: python for-loop

如何在迭代中更改python迭代器?

例如:

for i in range(10):
    print i
    i = 5

打印:

0
1
...
9

我想打印:

0
5
5
5
...
编辑:抱歉,这个问题让人感到困惑。我感兴趣的是为什么当我尝试在for循环期间更改迭代器时,for循环在下一次迭代时忽略它。

其他人已经提交了一个清除我的困惑的答案。 range创建一个列表,然后for循环将迭代器分配给列表中的下一个变量。

4 个答案:

答案 0 :(得分:1)

根据您的回复,您尝试执行的操作已经以continue的形式存在。它允许您通过检查某个条件保持跳过迭代:

for i in range(10):
    if i >= 5:
        continue # go to next iteration
    print i

假设您使用的是迭代器而不是列表,则可以一次跳过一个元素,因此跳转到给定索引是无关紧要的。

答案 1 :(得分:0)

for循环遍历由range创建的列表中的每个数字。您可以为给定的迭代更改i,但for循环只会转到列表中的下一个数字。我认为while循环将是一个不同的故事,它实际上使用了i的当前值

答案 2 :(得分:0)

要回复Cody Braun,请参阅以下代码和输出:

for i in range(10):
    if i >= 5:
        i = 5
    print i

输出:

0
1
2
3
4
5
5
5
5
5

答案 3 :(得分:0)

你可以创建一个可迭代的类并修改for循环中的迭代:

>>> class MyRange:
...     def __init__(self, stop):
...         self.current = 0 
...         self.stop = stop
...     def __iter__(self):
...         return self
...     def next(self): # Python 3: def __next__(self)
...         if self.current >= self.stop:
...             raise StopIteration
...         else:
...             self.current += 1
...             return self.current - 1 
...
>>> for i in MyRange(3):
...     print i
...
0
1
2
>>> r = MyRange(10)
>>> for i in r:
...     print i
...     r.current += 1
...
0
2
4
6
8
>>> r = MyRange(10)
>>> for i in r:
...     print i
...     r.current = 5
0
5
5
5
5
5
# and so on...