像 while 循环一样,我怎样才能跳过 for 循环中的一个步骤?

Posted

技术标签:

【中文标题】像 while 循环一样,我怎样才能跳过 for 循环中的一个步骤?【英文标题】:Like while loops, how can I skip a step in a for loop? 【发布时间】:2020-03-11 07:52:18 【问题描述】:

我尝试跳过 for 循环中的几个步骤,例如 while 循环。

在while循环中,将步骤调整为具体条件,如下代码所示。

i = 0 
while i <10:
    if i == 3:
        i = 5
    else:
        print(i)
    i = i + 1
#result 0 1 2 6 7 8 9

但是,我尝试以同样的方式调整 for 循环的步骤,但失败了。

for i in range(10):
    if i == 3:
        i = 5
    else:
        print(i)
#result 0 1 2 4 5 6 7 8 9

我不能在 for 循环中直接控制步骤 'i' 吗?

如果有办法,请告诉我,我将不胜感激。

【问题讨论】:

否,但您可以在要跳过的迭代中continue 您要解决什么问题?看来你是从错误的角度攻击它。 【参考方案1】:

在循环体中更改i 无效,因为它会在每次迭代时自动分配“range() 结果中的下一个值”。您可以改为在要跳过的值上使用 continue

for i in range(10):
    if 3 <= i <= 5:
        continue
    else:
        print(i)

【讨论】:

【参考方案2】:

不,你不能。在循环的每次新迭代中,for i in range(10) 语句中的 i 变量都会重新计算。

【讨论】:

【参考方案3】:

虽然@soulmerge 的答案有效,但如果您要跳过的迭代次数过多,则可能效率低下,在这种情况下,您可以构建您想要迭代的确切序列:

for i in (*range(3), *range(6, 10)): # imagine the case of (*range(3), *range(996, 1000))
    print(i)

或者更高效,使用itertools.chain 来避免先构建元组:

from itertools import chain
for i in chain(range(3), range(6, 10)):
    print(i)

【讨论】:

【参考方案4】:

在 C 语言中,i 是一个在 for 循环结束时递增的变量,您可以自己更改它,但是在 Python 中,for 循环的运行方式类似于生成器生成的其他语言的 foreach 循环结果和下一个结果用于每次迭代。

在这种情况下,如果您需要使用for(each) 循环,您可以使用 continue 跳过您想错过的迭代:

if i >= 3 and i <= 5:
    continue

请记住,forforeach 循环只是 while 循环的语法糖,最终它实际上是 goto label 的语法糖(是的,这有一些语言例外,但最终是汇编是goto)

【讨论】:

【参考方案5】:

我不确定我是否理解你的问题,但也许你正在寻找继续声明

While i < 10 :
    if i == 4 or i == 3 :
        continue

在这段代码中,当 i = 4 或 3 时跳过循环

【讨论】:

我想你把pass 误认为continue:前一个语句只会被解释器忽略,而后一个语句会导致循环“进入下一个循环”。见这里:***.com/a/9484008/44562

以上是关于像 while 循环一样,我怎样才能跳过 for 循环中的一个步骤?的主要内容,如果未能解决你的问题,请参考以下文章

For或While循环跳过输入[重复]

flex关键字

for/inforwhiledo/while 循环和 forEach 遍历的跳过和中断

我怎样才能退出 do-while 循环?

继续;用于跳过许多循环

如何跳过for-in循环的迭代(Swift 3)