[PYTHON] for循环中关于列表list中remove method 不得不说的秘密

在学习for loop的时候,是否遇到过这样情况,在遍历列表的时候,无论是用remove方法还是通用del 不能删掉想删除的元素?

首先list中remove method 可以直接删除 想删掉的值,例:a=['h','z','j',1,2,3]->a.remove(h)->a.remove(1)->a=['z','j',,2,3]

                del 通用方法呢 要使用统一的下标,通过下标来删掉对应的值,例:a=['h','z','j',1,2,3]->del a[0]->del a[4]->a=['z','j',1,3]

但是,我们把他放在for循环里是什么样呢?

本来我们想要的是,删除列表中每一个元素,但是为什么列表还会剩两个值?

因为具体过程如下:

1、当第一次删除后,后面的元素会前移,此时a=[2,3,4,5]#第一个元素可以正常删除
2、然后指针下一次会指向新列表的第二个元素(即初始状态的第三个位置),从而初始状态的第二个位置被跳过了,初始第三个位置被删除,接着后面的元素又再次前移(变成[2,4,5])

#指针对应的下标为2 ,因为发生位移,第二次遍历的时候i的值直接指向第二位,也是3
3、指针指向新列表的第三个元素,即初始状态的第5个元素5,然后5被删除了,因此只剩下[2,4]

#第一次:a=[1,2,3,4,5]->a=1 第二次:a=[2,3,4,5]->指针发生变法i=3 同理第三次i=5

 

如果数据量不是特别大的时候,可以尝试复制一份对应的数据,遍历旧数据的时候,删除新数据里的值,这样就实现了

这样就实现了删除列表,或者也可以建立新列表,每次遍历直接添加需要提取的元素

当然你要想删除列表,只需要clear method 就好了。

今天写的是,指针的问题,后面当然没有什么用,道理明白就好。

posted @ 2017-11-26 22:48 HONG-LIANG 阅读(...) 评论(...) 编辑 收藏