Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
pythonlistdel&;调解_Python_List_Del - Fatal编程技术网

pythonlistdel&;调解

pythonlistdel&;调解,python,list,del,Python,List,Del,我正在尝试从列表中删除多个元素。 这些元素的索引被动态评估,并存储在一个名为“dstry”的列表中。它可能看起来像这样: arr = [1, 2, 2, 3, 5, 6, 7, 8, 9, 2] dstry = [1, 2, 9] 然而,如果我这样做 for i in dstry: del arr[i] 列表开始缩小,并且dstry的目标元素不再位于它们应该位于的位置。 从逻辑上讲,我该如何解决这个问题?如果del可以一次解决所有问题并延迟阵列崩溃,那就太好了。我是否应该用一个标志值

我正在尝试从列表中删除多个元素。 这些元素的索引被动态评估,并存储在一个名为“dstry”的列表中。它可能看起来像这样:

arr = [1, 2, 2, 3, 5, 6, 7, 8, 9, 2]
dstry = [1, 2, 9]
然而,如果我这样做

for i in dstry:
    del arr[i]
列表开始缩小,并且
dstry
的目标元素不再位于它们应该位于的位置。 从逻辑上讲,我该如何解决这个问题?如果del可以一次解决所有问题并延迟阵列崩溃,那就太好了。我是否应该用一个标志值替换这些元素,然后在以后出现的任何地方删除它们,这样索引就不是一个因素了


非常感谢有点创造性的解决方案,但这应该可以解决您的索引问题

arr = [1, 2, 2, 3, 5, 6, 7, 8, 9, 2]
dstry = [1, 2, 9]

x=len(arr)

for i in dstry:
    del arr[-x+i]

print(arr)

什么是
arr.del
?列表没有
del
方法。你的意思是
del-arr[i]
?使用arr.remove()代替del()使用comprehension:
[a代表i,a在枚举(arr)中,如果我不在dstry中]
.Reverse
destry
循环时,索引保持忠实:
代表i在reversed(dstry):del-arr[i]
。这就是说,这样做在计算上效率很低。链接副本中的答案有许多更好的方法。感谢您的回复。但是,remove在这里并不能起到正确的作用,因为remove是基于列表中的值而不是索引的。只有当
dstry
从小到大排序时,当前的解决方案才有效。只要把列表倒过来,你就不必调整索引了。把它改成你说的。