像 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
请记住,for
和 foreach
循环只是 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 循环中的一个步骤?的主要内容,如果未能解决你的问题,请参考以下文章