码迷,mamicode.com
首页 > 编程语言 > 详细

Python在迭代器中删除列表元素

时间:2017-01-26 12:31:25      阅读:1539      评论:0      收藏:0      [点我收藏+]

标签:数据   多少   判断   索引   没有   拷贝   move   内存   策略   

在迭代器中删除列表元素是非常危险的,因为迭代器是直接对列表的数据进行引用

把列表拷贝给迭代器,然后对原列表进行删除操作就没问题了

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在迭代器中删除列表元素

标签:数据   多少   判断   索引   没有   拷贝   move   内存   策略   

原文地址:http://www.cnblogs.com/34fj/p/6351458.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!