鱼C论坛

 找回密码
 立即注册
查看: 1292|回复: 3

[已解决]这个列表里面为什么还会有个0?

[复制链接]
发表于 2022-1-8 13:38:26 | 显示全部楼层 |阅读模式
2鱼币
-140fccc09d04c241.jpg
最佳答案
2022-1-8 13:38:27
for index, value in enumerate(dat):
    ...


看上面这个代码,联想到你的问题。
当index=3, value = '0' 发生移除元素操作后,原来的列表会发生变化。dat = ['1', '2', '3', '*', '0', '0']  。注意这个 *只是方便表示已经删除的 '0'元素,并不存在。
那么现在的这个列表由原来的6个元素,变为5个元素。 ['1', '2', '3', '0', '0']。这个步骤没有疑问把。那么下一次迭代呢?
下次迭代index = 4 , value = '0' 。对于跟新后的dat数据来说,4号元素,已经是末尾元素, ['1', '2', '3', '0', '*'] ,删除末尾的元素最后的结果是 ['1', '2', '3', '0']
下一次迭代的报错会被内部捕捉,程序就此结束。

这个题目主要的是要告诉我们,不要对正在迭代的容器进行增,删操作。

最佳答案

查看完整内容

看上面这个代码,联想到你的问题。 当index=3, value = '0' 发生移除元素操作后,原来的列表会发生变化。dat = ['1', '2', '3', '*', '0', '0'] 。注意这个 *只是方便表示已经删除的 '0'元素,并不存在。 那么现在的这个列表由原来的6个元素,变为5个元素。 ['1', '2', '3', '0', '0']。这个步骤没有疑问把。那么下一次迭代呢? 下次迭代index = 4 , value = '0' 。对于跟新后的dat数据来说,4号元素,已经是末尾元素, ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-8 13:38:27 | 显示全部楼层    本楼为最佳答案   
for index, value in enumerate(dat):
    ...


看上面这个代码,联想到你的问题。
当index=3, value = '0' 发生移除元素操作后,原来的列表会发生变化。dat = ['1', '2', '3', '*', '0', '0']  。注意这个 *只是方便表示已经删除的 '0'元素,并不存在。
那么现在的这个列表由原来的6个元素,变为5个元素。 ['1', '2', '3', '0', '0']。这个步骤没有疑问把。那么下一次迭代呢?
下次迭代index = 4 , value = '0' 。对于跟新后的dat数据来说,4号元素,已经是末尾元素, ['1', '2', '3', '0', '*'] ,删除末尾的元素最后的结果是 ['1', '2', '3', '0']
下一次迭代的报错会被内部捕捉,程序就此结束。

这个题目主要的是要告诉我们,不要对正在迭代的容器进行增,删操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-8 13:42:43 From FishC Mobile | 显示全部楼层
迭代里尽量不使用remove
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-9 14:09:51 | 显示全部楼层
本帖最后由 PFBZSC 于 2022-1-9 14:15 编辑

remove会影响索引下标
正常执行,for循环会依次获取下标0,1,2,3,4,5的元素
当他remove第一个位于下标3的'0'时,下标4,5的元素就会往前推到下标3,4,因为下标3已经被for循环获取过了,下一次循环取的是下标4的元素处理,原下标4因为补上下标3的'0'因此被跳过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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