如何在Python中跳过单个循环迭代?

7

I have the following code:

for i in list1:
    if i == 5:
        #skip the NEXT iteration (not the end of this one)
    else:
        #do something

如何跳过触发跳过的迭代后面的迭代?例如,如果list1=[1, 2, 3, 4, 5, 6, 7],循环将跳过6并直接到7,因为5触发了跳过。我看过这个问题和其他几个问题,但它们都处理跳过当前迭代,而我想跳过下一个迭代。那些问题的答案建议使用continue,据我所知,这将停止当前迭代的其余部分并继续下一个迭代,这不是我想要的。如何在循环中跳过单个迭代? 编辑:已经有人建议使用next(),但这对我不起作用。当我运行以下代码时:
a = [1, 2, 3, 4, 5, 6, 7, 8]
ai = iter(a)
for i in a:
    print i
    if i == 5:
        _ = next(ai)

I get

1
2
3
4
5
6 #this should not be here
7
8

在这个问题中,使用next()也是建议: 跳过循环中多个迭代的Python


1
这是你的错误:for i in a:。应该是 for i in ai: - Moses Koledoye
3个回答

16
你可以从列表中创建一个迭代器。借助它,你可以在循环时改变循环项:
it = iter(list1)
for i in it:
    if i == 5:
        next(it) # Does nothing, skips next item
    else:
        #do something 

如果您计划使用在i == 5处的值,则应在评估条件之前进行某些操作

it = iter(list1)
for i in it:
    #do something
    if i == 5:
        next(it) # Does nothing, skips next item

如果您在终端中执行此操作,应将下一个项目分配给变量,因为终端可能会强制打印未解除引用的项:

>>> list1 = [1, 2, 3, 4, 5, 6, 7]
>>> it = iter(list1)
>>> for i in it:
...    print(i)
...    if i == 5:
...       j = next(it) # here
...
1
2
3
4
5
7

1
这似乎实际上并没有跳过下一次迭代。当我在循环的第一行添加“print i”时,它打印了1到7,但它应该打印1、2、3、4、5、7,跳过6。 - cat40
我没有使用终端。我编写并保存(并运行)了一个 .py 文件。 - cat40
你将输出传递给变量后,它仍然无法正常工作吗? - Moses Koledoye
是的,它仍然不起作用。 - cat40
请更新您的问题并说明所做的更改。如果您选择不这样做,也可以在评论中发布代码,以便我们查看。 - Moses Koledoye

4

只需设置一个标志:

>>> i
[0, 1, 2, 3, 4, 5, 6, 7]
>>> skip = False
>>> for q in i:
...    if skip:
...      skip = False
...      continue
...    if q == 5:
...       skip = True
...    print(q)
...
0
1
2
3
4
5
7

0
runNext = True
for i in list1:
    if i == 5:
        runNext = False
    else:
        if runNext:
            #do something
        runNext = False

这就是我已经在做的。有更好的方法吗? - cat40

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接