如何在for循环中跳过几次迭代

时间:2013-07-24 14:42:18

标签: python loops

在python中,我通常只需通过

遍历范围
for i in range(100): 
    #do something

但现在我想跳过循环中的几个步骤。更具体地说,我想要continue(10)这样的东西,以便它会跳过整个循环并将计数器增加10.如果我在C中使用for循环,我只需将10加到i,但是在Python中并没有真正起作用。

5 个答案:

答案 0 :(得分:23)

您无法更改i循环的目标列表(在本例中为for)。改为使用while循环:

while i < 10:
    i += 1
    if i == 2:
        i += 3

或者,使用迭代并递增:

from itertools import islice

numbers = iter(range(10))
for i in numbers:
    if i == 2:
        next(islice(numbers, 3, 3), None)  # consume 3

通过将iter()的结果赋值给局部变量,我们可以使用标准迭代工具(next())来推进循环内的循环序列,或者这里是{{1}的缩短版本消耗食谱)。在遍历迭代器时,itertools通常会为我们调用for

答案 1 :(得分:21)

最好的方法是为迭代器分配一个名称 - 它通常有一个迭代而不是迭代器(差异是一个可迭代的 - 例如一个列表 - 每次迭代时从头开始)。在这种情况下,只需使用the iter() built-in function

numbers = iter(range(100))

然后你可以使用名称在循环内推进它。执行此操作的最佳方法是使用the itertools consume() recipe - 因为它很快(它使用itertools函数来确保迭代发生在低级代码中,从而使得消耗值的过程非常快,并且避免了通过存储消耗的值来使用内存):

from itertools import islice
import collections

def consume(iterator, n):
    "Advance the iterator n-steps ahead. If n is none, consume entirely."
    # Use functions that consume iterators at C speed.
    if n is None:
        # feed the entire iterator into a zero-length deque
        collections.deque(iterator, maxlen=0)
    else:
        # advance to the empty slice starting at position n
        next(islice(iterator, n, n), None)

通过这样做,您可以执行以下操作:

numbers = iter(range(100))
for i in numbers: 
    ...
    if some_check(i):
        consume(numbers, 3)  # Skip 3 ahead.

答案 2 :(得分:4)

为什么不将值设置为跳过直到?像:

skip_until = 0
for i in range(100):
    if i < skip_until:
        continue
    if SOME_CONDITION:
        skip_until = i + 10
    DO_SOMETHING()

其中SOME_CONDITION是您跳过的原因,而DO_SOMETHING()是实际的循环内容?

答案 3 :(得分:0)

for i in range(0, 100, 10):
    print(i)

将打印0,10,20 ......

答案 4 :(得分:0)

一个迷人而最简单的形式是这样的:

>>> for i in range(5,10):
...     print (i)
... 
5
6
7
8
9

其中 5 是开始迭代的索引。