Python在迭代器中删除列表元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python在迭代器中删除列表元素相关的知识,希望对你有一定的参考价值。
在迭代器中删除列表元素是非常危险的,因为迭代器是直接对列表的数据进行引用
把列表拷贝给迭代器,然后对原列表进行删除操作就没问题了
pos=turtle.move() for each_fish in fish[:]: if each_fish.move()==pos: #鱼儿被吃掉 turtle.eat() fish.remove(each_fish) print(‘有一条鱼被吃‘)
Python的List的底层是实现是一个PyObject*数组。如果每次增加一个元素都扩张内存的话效率太低,在增加元素的时候所以会有预申请内存。同理删除元素的时候也不是马上就减小内存空间,他会按照一定的策略减小。而这种减小不太好预测。
再加上删除后索引如何调整并没有明确定义。比如一个长度为3的List你删除了第2个那么第三个下标应该是2还是3,等等可能会引发歧义。如果这个时候内存达到了需要减小的条件,迭代器就不太好判断新的索引究竟是多少。
所以Python为了通用性和安全性考虑就禁止在遍历时删除元素了。
以上是关于Python在迭代器中删除列表元素的主要内容,如果未能解决你的问题,请参考以下文章