python中用for循环遍历的过程中删除列表中元素的注意点
2018-09-07 19:41
489 查看
小编今天从项目引入这个天大的坑!!!
由于工作的需要,小编需要将旧表的数据迁移至新表,由于项目的需求要动态的创建表并迁移数据(表格用项目编号来区分,在模型类里面封装了创建表格的静态方法), 这个静态方法其实就是拼接sql语句。由于表格达到2000+,所以只好上线之前就迁移好数据和表格,小编花了将近一周的时间终于初见成效,但是其中有一块耗费了小编一天的时间,那就是在数据迁移的时候,遇到了不同的旧表的重复数据的迁移。我需要去掉重复的数据,所以也就有了双层的列表的遍历,删除相同数据的CNM天坑!也就是漏掉了数据,写这个经历不是为了什么,只是把自己的经验记下来,都是自己的宝贵财富。下面给大家介绍这个天坑:
look the demo:
[code]lists = [1,2,3,4,5,6] for list in lists: lists.remove(list) print(lists)
返回:[2, 4, 6]
解析:
1-问题:循环lists,想删除lists的所有元素,但实际确有数据保留了下来,
2-原因:这是因为在循环lists,并删除lists的元素时,列表的位置发生了移位,当删除“1”后,第二个元素“2”补位,这样“2”就躲过了被删除的命运,轮到“3”了,“3”被删除之后,“4”来补位,逃过一劫,以此类推!!
3-拓展:
(1)for循环是先判断对象是否为可迭代对象,不是的话直接报错,抛出TypeError异常,是的话,调用 __iter__或iter
方法,返回一个迭代器
(2)不断地调用迭代器的__next__或next
方法,每次按序返回迭代器中的一个值
(3)迭代到最后,没有更多元素了,就抛出异常 StopIteration,这个异常 python 自己会处理,不会暴露给开发者
4-所以在循环list时,不能循环的同时删除自身元素,而是要利用pop(下标)的删除。
阅读更多相关文章推荐
- python循环删除列表里的元素!漏删!
- [转]python 如何在一个for循环中遍历两个列表
- 删除列表元素时需注意的问题 分类: python基础学习 python 小练习 2013-10-09 14:02 293人阅读 评论(0) 收藏
- python 如何在一个for循环中遍历两个列表
- 在for循环遍历列表的过程中不能删除列表中的元素
- python 如何在一个for循环中遍历两个列表
- 关于swift for 循环 遍历数组删除元素的bug问题
- python列表及for循环要注意的知识点
- Python中不用循环同时遍历两个数组并进行对应元素的处理并进行删除
- python 如何在一个for循环中遍历两个列表
- python list列表删除元素需要注意的问题
- ArrayList循环遍历删除元素常见陷阱
- python 的列表遍历删除实现代码
- Java中ArrayList循环遍历并删除元素的陷阱
- Python实现删除列表中满足一定条件的元素示例
- Java循环中删除一个列表元素
- 在遍历List的过程中删除元素
- ArrayList循环遍历并删除元素的常见陷阱
- [python]删除列表中相同的元素
- Python实现列表删除重复元素的三种常用方法分析