版权声明:欢迎转载与留言提问 https://blog.csdn.net/qq_25439417/article/details/82026249
a=[1,2,3,4,5]
for i in a:
a.remove(i)
print a
最近做一个图像处理的项目,需要用到list动态更新循环,于是习惯性的用了 for in list,remove以后,发现list竟然没有变为空,而是还有一半数据在list里,当时有点蒙了,举个例子给大家说明下
1、remove解释
remove方法用于移除列表中某个值的第一个匹配项:
>>>x=['to','be','or','not','to','be']
>>>x.remove('be')
>>>x
['to','or','not','to','be']
2、最开始的那个结果解释:
按照平常理解,应该删除所有内容,可偏偏没有,因为具体过程如下:
1、当第一次删除后,后面的元素会前移,此时a=[2,3,4,5],
2、然后指针下一次会指向新列表的第二个元素(即初始状态的第三个位置),从而初始状态的第二个位置被跳过了,初始第三个位置被删除,接着后面的元素又再次前移(变成[2,4,5])
3、指针指向新列表的第三个元素,即初始状态的第5个元素5,然后5被删除了,因此只剩下[2,4]
画图如下所示:
或者程序打印看一下:
解决方案:
不要用for in循环了,用while等循环,然后list.remove可以换成list.pop
remove是清除 相同的第一个对象,pop是清除 指定下标索引的 对象。
所以 remove传递内容,pop传递索引。
while(1):
idx=0
while idx<len(alist):
a.pop(idx)
idx+=1