鱼C论坛

 找回密码
 立即注册
查看: 3146|回复: 8

[已解决]Python小白从挖坑到脱坑之路002_关于for

[复制链接]
发表于 2018-2-8 14:26:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 大头目 于 2018-2-8 14:41 编辑

list2 = [0,1,2,3,4,5,6,7,8,9]

for i in list2:
       
        if i ==5:
                list2.remove(i)
                print(list2)
        print(i)
       

print(list2)

程序如上,输出如附件图片1:
挖坑:在历遍list2的过程中,删除了某个元素,则下一个元素无法被历遍到。这个问题在递归时碰到的,第一次查起来很晕!
脱坑(现阶段理解):for in的历遍过程是按照索引位置历遍的,并不是按照元素历遍,也就是历遍过list[4]后将不再历遍删除元素5之后列表中的list[4]——也就是6。现阶段想到的办法就是把满足条件要删除的元素存起来,到最后再一起删。
类似坑:set集合会直接报错,如图2

如果理解有误欢迎各位大牛大仙大甲鱼指正,虚心求教,有不一样的理解也请留言分享交流,虚心!
最佳答案
2018-2-8 16:33:33
大头目 发表于 2018-2-8 14:42
因为在编程中需要删除list中的元素,还用到了递归,套起来就很晕

你可以用两个列表来操作,copy一份就行了
Capture1.JPG
Capture2.JPG

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-8 14:34:07 | 显示全部楼层
理解应该没问题,所以在写for循环的时候要特别注意in后面的可迭代对象的变化
或许更安全的做法是将它转化为tuple
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-2-8 14:42:39 | 显示全部楼层
BngThea 发表于 2018-2-8 14:34
理解应该没问题,所以在写for循环的时候要特别注意in后面的可迭代对象的变化
或许更安全的做法是将它转化 ...

因为在编程中需要删除list中的元素,还用到了递归,套起来就很晕
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 16:33:33 | 显示全部楼层    本楼为最佳答案   
大头目 发表于 2018-2-8 14:42
因为在编程中需要删除list中的元素,还用到了递归,套起来就很晕

你可以用两个列表来操作,copy一份就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-9 11:24:35 | 显示全部楼层
可以试试使用pop
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-9 12:03:00 From FishC Mobile | 显示全部楼层
majia1015 发表于 2018-3-9 11:24
可以试试使用pop

试过了一样的会报错,确实要用2个列表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-9 12:55:13 | 显示全部楼层

pop和remove的结果是一样的,所以不成
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-9 13:22:37 | 显示全部楼层
for i in list2[::-1]:
      
        if i ==5:
                list2.remove(i)
                print(list2)
        print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-2-19 21:34:55 | 显示全部楼层
list2 = [0,1,2,3,4,5,6,7,8,9]

for i in list2:
        
        if i ==5:
                list2.remove(i)
                print(list2)
        print(i)
        

print(list2)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-7 11:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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