【问题标题】:How to skip a single loop iteration in python? [duplicate]如何在python中跳过单个循环迭代? [复制]
【发布时间】:2016-10-17 07:55:42
【问题描述】:

我有以下代码:

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触发了跳过 我见过this 问题和其他几个问题,但它们都处理跳过当前 迭代,而我想跳过下一个 迭代。这些问题的答案建议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)

我明白了

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

使用next()也是本题的建议:Skip multiple iterations in loop python

【问题讨论】:

  • 这是你的错误:for i in a:。应该是for i in ai:

标签: python loops iteration


【解决方案1】:

只需设置一个标志:

>>> 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

【讨论】:

    【解决方案2】:
    runNext = True
    for i in list1:
        if i == 5:
            runNext = False
        else:
            if runNext:
                #do something
            runNext = False
    

    【讨论】:

    • 这就是我已经在做的事情。有没有更好的方法?
    【解决方案3】:

    您可以从列表中创建iterator。有了这个,你可以在循环时改变循环项:

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

    如果您打算使用 i==5 的值,您应该在评估条件之前 do something

    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
    

    【讨论】:

    • 这似乎并没有真正跳过下一次迭代。当我将print i 添加到循环的第一行时,它会打印 1 到 7,而它应该打印 1、2、3、4、5、7,跳过 6
    • 我没有使用终端。我编写并保存(并运行)了一个 .py 文件
    • 而且你把输出传给变量后还是不行?
    • 是的,还是不行
    • 请用您所做的更改更新您的问题。或者,如果您不选择,也可以将代码发布在 cmets 中,以便我们查看。
    猜你喜欢
    • 2013-01-29
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2021-11-15
    • 2019-05-17
    相关资源
    最近更新 更多