鱼C论坛

 找回密码
 立即注册
查看: 1191|回复: 2

[已解决]请问python中for循环的问题

[复制链接]
发表于 2020-3-16 15:32:09 | 显示全部楼层 |阅读模式

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

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

x
请问附件里面那个for循环,如果不加切片就会无限下去,请问为什么。
最佳答案
2020-3-16 15:54:50
你说的是第二个例子吧。
这里说的很清楚啊,在循环内需要对序列进行修改操作时,建议先拷贝一份副本,这是因为在循环过程中序列已经不是原来的序列了可能会导致重复选中某一元素。
就拿你截图中这个例子来说吧。
words=['cat','window','defenestrate']
for w in words:
    if len(w)>6:
        words.insert(0,w)
若不用副本,
第一次循环的时候,w=words[0]='cat',len(w)=3<6,不执行insert操作,words不变,words=['cat','window','defenestrate'];
第二次循环的时候,w=words[1]='window',len(w)=6,不执行insert操作,words不变,words=['cat','window','defenestrate'];
第三次循环的时候,w=words[2]='defenestrate',len(w)=12>6,执行insert操作,words改变,words=['defenestrate','cat','window','defenestrate'];
第四次循环的时候,w=words[3]='defenestrate',len(w)=12>6,执行insert操作,words改变,words=['defenestrate','defenestrate','cat','window','defenestrate'];
之后每次循环,words长度都会增加,w选中的永远都是'defenestrate'。因此进入死循环。
所以,在循环中若需要对序列进行操作时,一般建议用切片拷贝副本作为循环条件。
问题1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-16 15:54:50 | 显示全部楼层    本楼为最佳答案   
你说的是第二个例子吧。
这里说的很清楚啊,在循环内需要对序列进行修改操作时,建议先拷贝一份副本,这是因为在循环过程中序列已经不是原来的序列了可能会导致重复选中某一元素。
就拿你截图中这个例子来说吧。
words=['cat','window','defenestrate']
for w in words:
    if len(w)>6:
        words.insert(0,w)
若不用副本,
第一次循环的时候,w=words[0]='cat',len(w)=3<6,不执行insert操作,words不变,words=['cat','window','defenestrate'];
第二次循环的时候,w=words[1]='window',len(w)=6,不执行insert操作,words不变,words=['cat','window','defenestrate'];
第三次循环的时候,w=words[2]='defenestrate',len(w)=12>6,执行insert操作,words改变,words=['defenestrate','cat','window','defenestrate'];
第四次循环的时候,w=words[3]='defenestrate',len(w)=12>6,执行insert操作,words改变,words=['defenestrate','defenestrate','cat','window','defenestrate'];
之后每次循环,words长度都会增加,w选中的永远都是'defenestrate'。因此进入死循环。
所以,在循环中若需要对序列进行操作时,一般建议用切片拷贝副本作为循环条件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-16 15:56:24 | 显示全部楼层
因为当判断到'defensestrate'时,if的条件成立,将在索引0的位置将'defensestrate'插入列表。此时原列表的所有元素后移一位,虽然再次循环时迭代器的next方法指向了下一个元素,但这个“新元素”即是移位过来的列表最末的那个元素'defensestrate'(还是上一次循环指向的那个),此时仍然满足if的条件,所以会无限循环下去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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