pots

博客园 首页 新随笔 联系 订阅 管理

一个问题,在一般的循环过程里如何动态更改循环的次数呢?

for i in range(5)
    if i == 3:
         不适合条件,希望执行第五次循环

在循环内部修改 i 的值发现循环次数并没有改变,然后去查找了一下关系range的资料

 

作者:Beamouser
链接:https://www.zhihu.com/question/49098374/answer/152843820
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本质上,这是个 for xxx in 可迭代对象: 的问题

拿这个举例

for i in range(5):

在程序第一次运行到这句的时候,

python会自动去调用range(5)对象的__iter__()方法,返回一个range_iterator对象

再由这个range_iterator对象不断调用其__next__()方法,直到捕获异常StopIteration为止

完成迭代


换句话说,当执行这个for语句的时候,迭代次数就已经被in后面的可迭代对象确定下来了

 

至于通过__next__()方法返回的值是怎么和i产生关系的,好像不属于这个问题


当已经被确定了迭代(循环)次数后

在列表没有赠删元素时,当然不会有越界的危险

但一旦在迭代过程中pop()或者append()元素后

前者越界

 


后者漏值

 

 



 以及一些新的知识

“扁平结构比嵌套结构更好” – 《Python之禅》

比如 list(map(lambda x:4 if x==3 else x,a))

如果一定要用for:

a = [1, 2, 3, 4, 5, 6]

3变成4

[4 if x==3 else x for x in a]

b = [1, 2, 4, 4, 5, 6]

删除4

[x for x in b if x != 4]

也是可以的。。



作者:R Mello
链接:https://www.zhihu.com/question/49098374/answer/305239981
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
posted on 2018-04-17 21:40  poooooots  阅读(128)  评论(0编辑  收藏  举报