【发布时间】:2018-08-27 13:59:18
【问题描述】:
我正在尝试从列表中删除多个元素。 这些元素的索引被动态评估,并存储在一个名为“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.del?列表没有del方法。你是说del arr[i]吗? -
使用 arr.remove() 代替 del()
-
使用理解:
[a for i, a in enumerate(arr) if i not in dstry]. -
在循环遍历
destry时反向,这样索引就保持不变:for i in reversed(dstry): del arr[i]。话虽如此,这样做在计算上是低效的。链接副本中的答案有许多优越的方法。