Python List Romve的问题,清理不完全

版权声明:欢迎转载与留言提问 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 

猜你喜欢

转载自blog.csdn.net/qq_25439417/article/details/82026249