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为了通用性和安全性考虑就禁止在遍历时删除元素了。

时间: 2024-10-24 11:41:37

Python在迭代器中删除列表元素的相关文章

在java中删除数组元素的练习

有一个有序整数数组,要求输入一个数字,在数组中查找是否有这个数,如果有,将该数作为最后一个元素(其他元素仍然有序):如果没有,则显示“数组中没有这个数!” public static void main(String[] args) { int[] m={1,2,3,4,5,6,7,8,9,10}; System.out.println("请输入一个整数:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int ind

SharePoint中删除列表记录

方法1(快速,以理解,可以封装): SPList spListQuestion = spWeb.Lists["Question List"]; for (int i = spListQuestion.Items.Count - 1; i >= 0; i--) { spListQuestion.Items[i].Delete(); } 方法2(繁琐): SPList spListQuestion = spWeb.Lists["Question List"]; s

【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】

[082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->

ES6数组中删除指定元素

知识点: ES6从数组中删除指定元素 findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引.否则返回-1. arr.splice(arr.findIndex(item => item.id === data.id), 1) http://louiszhai.github.io/2017/04/28/array/ 1:js中的splice方法 splice(index,len,[item]) 注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组

Python 如何优雅的删除列表中的重复元素

假定有一个需求:需要删除列表中的重复元素,有几种实现方法? 方法一:利用Python 集合的特性 去除重复元素,代码如下: list1 = [1,3,5,7,9,7,4,3,6,1] #将列表强制转换为集合,再转换回列表形式 list1=list(set(list1)) print(list1) 方法二:用一个词形容,腾笼换鸟,代码如下: list1 = [1,3,5,7,9,7,4,3,6,1] list2=[] for i in list1: #遍历list1列表中的元素,如果该元素不在li

python中删除某个元素的3种方法

python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除举例说明: >>> str=[1,2,3,4,5,2,6] >>> str.remove(2) >>> str [1, 3, 4, 5, 2, 6] 2.pop: 删除单个或多个元素,按位删除(根据索引删除) ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:××× 寻找有志同道合

Java集合类ArrayList循环中删除特定元素

在项目开发中,我们可能往往需要动态的删除ArrayList中的一些元素. 一种错误的方式: <pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } } 上面这种方式会抛出如下异常: Exception in thread "main" java.lang.I

python删除列表元素

1.需求 num = [1,2,2,2,3,4,2,2,2,2,2,2,22,2]把列表中的有2的元素全部删除 2.编程代码 nums = [1,2,2,2,3,4,2,2,2,2,2,2,22,2]print("打印删除前的元素:")print(nums)temp = []for i in nums: if i !=2 and "2" is not str(i): temp.append(i)print("打印删除后的元素:")print(te

python中修改列表元素的方法

一.在for循环中直接更改列表中元素的值不会起作用: 如: l = list(range(10)[::2]) print (l) for n in l: n = 0 print (l) 运行结果: [0, 2, 4, 6, 8] [0, 2, 4, 6, 8] l中的元素并没有被修改 二.在for循环中更改list值的方法: 1.使用range l = list(range(10)[::2]) print (l) for i in range(len(l)): l[i] = 0 print (l