摘要:对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素。
常见用法: a = [1,2,3,4]
,a.remove(1)
,而后a就是[2,3,4]
;对于a = [1,1,1,2]
,其结果也是[1,1,2]
,这是最基本的用法。
可是对于下面这个:python
a = [1,2,3,4] for i in a: a.remove(i) # 结果 a = [2,4]
或者说数组
a = [1,1,1,1,1,2] for i in a: a.remove(1) #结果 a = [1,1,2]
是否是跟想象中的不同,其主要缘由以下(^表示当前迭代器位于列表中的位置): a = [ 1 , 2 , 3 , 4] 假设此时 ^ 默认状况下只想第一个元素,而后执行a.remove(1),而后下标向后移动,列表由于删除了元素,后面的向前移动,以下: a = [ 2 , 3 , 4] 此时 ^ 此时执行a.remove(3),重复上面的移动 a = [ 2 , 4] 此时 ^ 由于已经到了列表的边界,故结束遍历,并返回`a = [2,4]`。
解决办法:函数
# 一下为解决办法之一 d = dict(zip(range(len(a)), a)) [v for k, v in d.items() if v != value]
总结:关于python列表的remove操做涉及了列表下标的移动以及列表中元素的移动,涉及了一些关于数组的知识。其核心问题就是前面所说的。code