标签:为什么 实现 没有 情况 for loop 今天 图片 跳过 学习
在学习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 就好了。
今天写的是,指针的问题,后面当然没有什么用,道理明白就好。
[PYTHON] for循环中关于列表list中remove method 不得不说的秘密
标签:为什么 实现 没有 情况 for loop 今天 图片 跳过 学习
原文地址:http://www.cnblogs.com/hongzejun/p/7900892.html