风百默 发表于 2022-1-8 13:38:26

这个列表里面为什么还会有个0?

Stubborn 发表于 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']
下一次迭代的报错会被内部捕捉,程序就此结束。

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

wp231957 发表于 2022-1-8 13:42:43

迭代里尽量不使用remove

PFBZSC 发表于 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'因此被跳过
页: [1]
查看完整版本: 这个列表里面为什么还会有个0?