一个问题,在一般的循环过程里如何动态更改循环的次数呢?
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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。