Python遍历数组删除元素时出现List index out of range错误求解
解决List index out of range错误:列表引用与遍历删除的问题
这个问题我之前踩过一模一样的坑,核心原因其实是列表的引用赋值在搞怪!
先拆解你原代码的问题:
- 你写的
res_arr = arr并没有创建一个新的列表,而是让res_arr和arr指向了内存中同一个列表对象——说白了就是俩变量共用同一份数据。 - 循环
for i in range(len(arr))在执行前就确定了循环次数是原arr的长度(也就是7次)。但每次执行res_arr.remove(arr[i])时,因为两个变量指向同一个列表,所以arr的长度会跟着res_arr一起减少。比如删除55之后,列表长度变成6,但循环还是会按7次去跑,当i到6的时候,列表只剩6个元素(索引范围0-5),自然就触发了List index out of range错误。
你后来改成res_arr = list(arr)就完美解决了!list(arr)会生成原列表的浅拷贝,相当于创建了一个完全独立的新列表。这时候循环遍历原arr的元素,删除的是新列表res_arr里的内容,原arr的长度不会变化,循环就能正常执行完,不会再出现索引越界的问题。
另外给你推荐一个更简洁的写法,用列表推导式一步到位,还能避免遍历删除的各种坑:
arr = [11,22,33,44,55,66,77] brr = [1,2,3,4,55] res_arr = [num for num in arr if num not in brr]
内容的提问来源于stack exchange,提问作者nnnnn
相关产品推荐
相关产品推荐

