关于遍历列表删除元素的疑惑
我被这两种情况搞晕了,谁能解释一下过程,多谢。第二种方法的结果为什么不是呢?本帖最后由 jackz007 于 2021-11-4 22:53 编辑
循环删除列表元素的时候,必须以列表的副本为枚举对象,不可以用被删除元素的列表本身,这个作为知识点必须牢记。
l =
for item in l[:]:// 这里必须参照 l 的副本
l . remove(item)
print(l)
运行实况:
D:\00.Excise\Python>python x.py
[]
D:\00.Excise\Python>
l =
for item in l[:]:
if item == 0:
l . remove(item)
print(l)
运行实况:
D:\00.Excise\Python>python x.py
D:\00.Excise\Python> jackz007 发表于 2021-11-4 22:45
循环删除列表元素的时候,必须以列表的副本为枚举对象,不可以用被删除元素的列表本身,这个作为知 ...
多谢指导。
不过我突然想明白了,为什么第二种方法是那种结果了。 oldcar 发表于 2021-11-4 23:04
多谢指导。
不过我突然想明白了,为什么第二种方法是那种结果了。
如果问题已经解决,不要忘记设置 "最佳答案" 哦。 虽然2,3之间那个 0 没有遍历到
但是后面那个 5 ,6 之间的零遍历到了
所以还会执行一次remove(0)
而remove执行机制是遍历列表,找到第一个该元素删除,所以前面那个 0 可以说是被后面那个 0 给坑了
页:
[1]