Python 从数组中删除元素时列表索引超出范围
我知道这是一个基本的问题,但这里很奇怪 我不知道为什么会出现这样的错误。请帮我做这个。提前谢谢Python 从数组中删除元素时列表索引超出范围,python,python-3.x,Python,Python 3.x,我知道这是一个基本的问题,但这里很奇怪 我不知道为什么会出现这样的错误。请帮我做这个。提前谢谢 arr = [11,22,33,44,55,66,77] brr = [1,2,3,4,55] res_arr = arr for i in range(len(arr)): if arr[i] in brr: res_arr.remove(arr[i]) 给我错误列表索引超出范围 有什么线索吗 编辑: arr = [11,22,33,44,55,66,77] brr =
arr = [11,22,33,44,55,66,77]
brr = [1,2,3,4,55]
res_arr = arr
for i in range(len(arr)):
if arr[i] in brr:
res_arr.remove(arr[i])
给我错误列表索引超出范围
有什么线索吗
编辑:
arr = [11,22,33,44,55,66,77]
brr = [1,2,3,4,55]
print([i for i in arr if i not in brr])
[11, 22, 33, 44, 66, 77]
import copy
res_arr = copy.deepcopy(arr)
这帮助我解决了这个错误
res\u arr=list(arr)
使用列表理解
。在迭代时删除元素不是一个好主意。而且,res_arr=arr
不会做你想做的事。您需要了解如何在python中复制对象
Ex:
arr = [11,22,33,44,55,66,77]
brr = [1,2,3,4,55]
print([i for i in arr if i not in brr])
[11, 22, 33, 44, 66, 77]
import copy
res_arr = copy.deepcopy(arr)
输出:
arr = [11,22,33,44,55,66,77]
brr = [1,2,3,4,55]
print([i for i in arr if i not in brr])
[11, 22, 33, 44, 66, 77]
import copy
res_arr = copy.deepcopy(arr)
可以使用copy模块在python中复制对象
Ex:
arr = [11,22,33,44,55,66,77]
brr = [1,2,3,4,55]
print([i for i in arr if i not in brr])
[11, 22, 33, 44, 66, 77]
import copy
res_arr = copy.deepcopy(arr)
res\u arr=arr
不复制列表。因此,当您在相同的列表=>复合副本上迭代时,您正在删除项目。您正在从与arr
长度相同的res\u arr
中删除项目。当您删除项目时,列表会越来越短,因此会出现错误。假设您有两个包含6个元素的列表。然后,您将拥有从0到5的索引。如果您碰巧从第二个列表中删除了一个项目,则与原始项目相比,该项目将少一个元素。有两种方法可以解决此问题:*而不是复制列表并删除元素。只需使用您想要的元素创建一个新的。*复制列表,而不是从头到尾删除项目,而是从头到尾删除项目,这样您就不会有超出范围的问题。@Jean Françoisfare说得对,您不应该从正在迭代的列表中删除项目,但是这种情况下的错误是因为remove(item)
不会删除值为item
的项,但索引项
处的元素确实很糟糕,因为jesse Bakker从您迭代的列表中删除的信息非常有用,而且他没有复制列表。然而,他得到的错误是因为list.remove(i)删除了索引i处的元素,而不是具有值iNo的元素,该值不需要用于copy
,而是用于更复杂的对象。使用res\u arr=list(arr)
。他问为什么我的错误会发生
,而不是如何解决这个问题
。即使他的问题的答案是好的莫先生,这很有帮助,谢谢。拉凯什,你的回答也很有效。谢谢