为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python中更改for循环的索引?

如何在Python中更改for循环的索引?

繁星coding 2019-12-03 15:45:53
假设我有一个for循环:for i in range(1,10):    if i is 5:        i = 7如果要i满足某些条件,我想更改。我试过了,但是没用。我该怎么办?
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

对于您的特定示例,这将起作用:


for i in range(1, 10):

    if i in (5, 6):

        continue

但是,使用while循环可能会更好:


i = 1

while i < 10:

    if i == 5:

        i = 7

    # other code

    i += 1

甲for环分配一个变量(在这种情况下i/在每次迭代开始时)到下一个元素列表中的迭代。这意味着无论您在循环内做什么,i都将成为下一个元素。该while循环有没有这样的限制。


查看完整回答
反对 回复 2019-12-03
?
大话西游666

TA贡献1817条经验 获得超14个赞

为什么问题循环无法按预期工作的更多背景知识。


一个循环


for i in iterable: 

    # some code with i

是基本的速记


iterator = iter(iterable)

while True:

    try:

        i = next(iterator)            

    except StopIteration:

        break

    # some code with i

因此,for循环从一个由迭代器构成的迭代器中提取值,并自动识别该迭代器何时用尽并停止。


正如你所看到的,在每次迭代while循环我被重新分配,因此值i将被覆盖,无论您在发出任何其他的重新分配的# some code with i一部分。


因此,forPython中的循环不适合对循环变量进行永久性更改,因此您应该采用while循环,正如Volatility的答案中已经证明的那样。


查看完整回答
反对 回复 2019-12-03
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

这个概念在C语言世界中并不罕见,但应尽可能避免。但是,这就是我实施的方式,以一种我清楚知道正在发生的方式。然后,您可以在循环内的任何位置将要向前跳转的逻辑放在索引中,读者会知道要注意skip变量,而很容易错过将i = 7嵌入深处的情况:


skip = 0

for i in range(1,10):

   if skip:

      skip -= 1

      continue


   if i=5:

      skip = 2


   <other stuff>


查看完整回答
反对 回复 2019-12-03
  • 3 回答
  • 0 关注
  • 1630 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信