[英]setting python for loop iterator during iteration
如何在中期迭代中更改python迭代器?
例如:
for i in range(10):
print i
i = 5
打印:
0
1
...
9
我想打印:
0
5
5
5
...
编辑:很抱歉,这个问题使人们感到困惑。 我想知道为什么当我尝试在for循环中更改迭代器时,for循环在下一次迭代时会忽略它。
其他人已经提交了答案,这消除了我的困惑。 range创建一个列表,然后for循环将迭代器分配给列表中的下一个变量。
按照你回应你想已经做什么存在的形式continue
。 它允许您通过检查某个条件成立来跳过迭代:
for i in range(10):
if i >= 5:
continue # go to next iteration
print i
假设您使用的是迭代器而不是列表,则可以一次跳过一个元素,因此跳转到给定的索引是无关紧要的。
for循环遍历由range创建的列表中的每个数字。 您可以为给定的迭代更改i,但是for循环只会转到列表中的下一个数字。 我认为while循环将是一个不同的故事,它实际上使用了i的当前值
要回显Cody Braun,请参见以下代码和输出:
for i in range(10):
if i >= 5:
i = 5
print i
输出:
0
1
2
3
4
5
5
5
5
5
您可以创建一个可迭代的类,并在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...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.