博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 循环
阅读量:6915 次
发布时间:2019-06-27

本文共 961 字,大约阅读时间需要 3 分钟。

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

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
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/pots/p/8870213.html

你可能感兴趣的文章
HTTP Status 400 - Required MultipartFile parameter 'logoFole' is not present
查看>>
关于java字符串常用一些api 效率比拼小结(java对大型的字符串api处理效率比拼)...
查看>>
PHP句法规则详解
查看>>
h2 数据文件解析
查看>>
DML、DDL、DCL区别
查看>>
freemarker集成shiro标签
查看>>
java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
查看>>
Spring Boot 2.x 启动全过程源码分析(上)入口类剖析
查看>>
Java应用性能管理工具 Pinpoint
查看>>
jQuery UI Accordion in ASP.NET MVC - feed with data from database
查看>>
Linux运维课之Mysql cluster随堂视频
查看>>
Android入门之创建一个AndroidStudio工程
查看>>
2012年下半年系统集成项目管理工程师真题(案例分析)(3)
查看>>
LAMP平台下用Drupal快速建站
查看>>
利用nginx的proxy_next_upstream实现线路容灾
查看>>
chrome 插件开发
查看>>
[LintCode] Serialize and Deserialize Binary Tree
查看>>
Android 矢量图
查看>>
linux awk命令详解
查看>>
MySQL的SET字段类型
查看>>