鱼C论坛

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

[已解决]关于遍历列表删除元素的疑惑

[复制链接]
发表于 2021-11-4 22:37:55 | 显示全部楼层 |阅读模式

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

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

x
我被这两种情况搞晕了,谁能解释一下过程,多谢。第二种方法的结果为什么不是[1, 2, 0, 3, 5, 6]呢?
最佳答案
2021-11-5 10:05:51
虽然2,3之间那个 0 没有遍历到
但是后面那个 5 ,6 之间的零遍历到了
所以还会执行一次remove(0)
而remove执行机制是遍历列表,找到第一个该元素删除,所以前面那个 0 可以说是被后面那个 0 给坑了
Snap14.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-4 22:45:46 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-4 22:53 编辑

       循环删除列表元素的时候,必须以列表的副本为枚举对象,不可以用被删除元素的列表本身,这个作为知识点必须牢记。
l = [1 , 0 , 2 , 0 , 0 , 0 , 3 , 0 , 5 , 0 , 6]
for item in l[:]:  // 这里必须参照 l 的副本
    l . remove(item)
    print(l)
        运行实况:
D:\00.Excise\Python>python x.py
[0, 2, 0, 0, 0, 3, 0, 5, 0, 6]
[2, 0, 0, 0, 3, 0, 5, 0, 6]
[0, 0, 0, 3, 0, 5, 0, 6]
[0, 0, 3, 0, 5, 0, 6]
[0, 3, 0, 5, 0, 6]
[3, 0, 5, 0, 6]
[0, 5, 0, 6]
[5, 0, 6]
[0, 6]
[6]
[]

D:\00.Excise\Python>
l = [1 , 0 , 2 , 0 , 0 , 0 , 3 , 0 , 5 , 0 , 6]
for item in l[:]:
    if item == 0:
        l . remove(item)
        print(l)
        运行实况:
D:\00.Excise\Python>python x.py
[1, 2, 0, 0, 0, 3, 0, 5, 0, 6]
[1, 2, 0, 0, 3, 0, 5, 0, 6]
[1, 2, 0, 3, 0, 5, 0, 6]
[1, 2, 3, 0, 5, 0, 6]
[1, 2, 3, 5, 0, 6]
[1, 2, 3, 5, 6]

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

使用道具 举报

 楼主| 发表于 2021-11-4 23:04:22 | 显示全部楼层
jackz007 发表于 2021-11-4 22:45
循环删除列表元素的时候,必须以列表的副本为枚举对象,不可以用被删除元素的列表本身,这个作为知 ...

多谢指导。
不过我突然想明白了,为什么第二种方法是那种结果了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-4 23:10:57 | 显示全部楼层
oldcar 发表于 2021-11-4 23:04
多谢指导。
不过我突然想明白了,为什么第二种方法是那种结果了。

        如果问题已经解决,不要忘记设置 "最佳答案" 哦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 10:05:51 | 显示全部楼层    本楼为最佳答案   
虽然2,3之间那个 0 没有遍历到
但是后面那个 5 ,6 之间的零遍历到了
所以还会执行一次remove(0)
而remove执行机制是遍历列表,找到第一个该元素删除,所以前面那个 0 可以说是被后面那个 0 给坑了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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