Python_遍历时删除的处理&说明
遍历时,建议不能直接进行remove删除,会跳过某些元素
实例:
a=[1,2,3,4,5] for i in a: a.remove(i) print a
a=[1,2,3,4,5] for i in a: a.remove(i) print a
结果:[2,4]
1、remove解释
remove:移除列表中某个值的第一个匹配项:
s = [1,2,3,4,5] s.remove(3) s [1, 2, 4, 5]
2、结果的说明:
按平常理解,应删除所有内容,然而不是,因为具体过程如下:
1、当第一次删除后,后面的元素会前移,此时a=[2,3,4,5],
2、然后指针下一次会指向新列表的第二个元素(即初始状态的第三个位置),从而初始状态的第二个位置被跳过了,初始第三个位置被删除,接着后面的元素又再次前移(变成[2,4,5])
3、指针指向新列表的第三个元素,即初始状态的第5个元素5,然后5被删除了,因此只剩下[2,4]
说明:
*代表位置(可理解为指针位置)
[1,2,3,4,5](第一次位置在最开始)
*
[2,3,4,5] (删除一个元素后,位置进入下一个)
*
[2,4,5] (删除一个元素后,位置进入下一个)
*
[2,4] (最后结果)
打印结果:
a=[1,2,3,4,5] for i in a: a.remove(i) print(a)
3、结论:
遍历时建议不要进行remove删除操作要
剔除某些元素,可参照如下方法:
实例:
想清空列表l,只留元素4。
1、利用index来遍历删除列表l
l = [1,2,3,4,5] for i in range(len(l)): if l[i] == 4: del l[i] print(l)
2、建立新的list存放要删除的元素
l = [1,2,3,4,5] dellist = [] for i in l: if i == 4: dellist.append(i) for i in dellist: l.remove(i)
这样也能达到预期删除的效果
*遍历时,删除元素一定要注意,特别是有些操作并不报错,但却没有达到预期的效果