繁体   English   中英

在迭代过程中为循环迭代器设置python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM