鱼C论坛

 找回密码
 立即注册
查看: 673|回复: 4

[已解决]for循环的问题

[复制链接]
发表于 2020-5-8 10:05:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
lst =[]
for i in lst:
        lst.append('a')
        print(lst)


上述中lst,这里如何理解?


第二题:
lst2 = [1,2]
for i in lst:
        lst.append('b')
        print(lst2)

这个的答案,为啥是死循环?其实是跟上题有关系的。


各位路过朋友,帮忙解惑
最佳答案
2020-5-8 10:07:21
第一题,因为列表是空的,所以不会循环。
第二题,因为你每遍历一次,列表就会添加一个元素,
这样是永远不会遍历完的,所以,最好不要改变for循环
所遍历的可迭代对象。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 10:07:21 | 显示全部楼层    本楼为最佳答案   
第一题,因为列表是空的,所以不会循环。
第二题,因为你每遍历一次,列表就会添加一个元素,
这样是永远不会遍历完的,所以,最好不要改变for循环
所遍历的可迭代对象。

评分

参与人数 1鱼币 +2 收起 理由
heidern0612 + 2 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 10:08:11 | 显示全部楼层
本帖最后由 suchocolate 于 2020-5-8 10:12 编辑

lst空吧,不会进入循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 10:30:06 | 显示全部楼层
在遍历一个可变长度类型时,最好不要在循环体内修改该变量。容易出错
例如你的第二题,在遍历lst的过程中向lst中添加了元素,导致永远无法遍历完,进入死循环
第一次循环,lst是[1,2],得到的 i 是 1,
第二次循环,lst是[1,2,'b'],得到的 i 是2,
第三次循环,lst是[1,2,'b','b'],得到的 i 是 'b',
第四次循环,lst是[1,2,'b','b','b'],得到的 i 是 'b',
……
之后每次遍历lst都会被添加一个元素,每次得到的 i 都是 'b',因此进入了死循环

第一题没有进入死循环,是因为lst一开始为空,根本没有进入循环

一般情况下若可能要在循环体内对遍历对象lst修改的话,用切片 for i in lst[:]:,相当于遍历的是lst 的一个副本,在循环中修改lst不影响该副本,这样可以避免死循环

第一次循环,lst副本是[1,2],得到的 i 是 1,循环后lst是[1,2,'b'],
第二次循环,lst副本是[1,2],得到的 i 是 2,循环后lst是[1,2,'b','b']
对lst副本遍历结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-8 11:31:49 | 显示全部楼层
lst2 = [1,2]
for i in lst2:
        lst2.append('b')
        print(lst2)
第二题你题目都写错了。应该是这样吧。

你需要理解的是迭代器:比如你有一箱子书需要拿到书架上摆放,迭代器就是负责一次递一本书给你,直到箱子里没有书。
第二题可以这样理解:迭代器帮你从箱子里把书拿出来,但同时另一个人不停的在往箱子里放书……箱子里的书迭代器是拿不完的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 04:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表