【问题标题】:Python List Del & Reconciliation [duplicate]Python List Del & Reconciliation [重复]
【发布时间】: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]。话虽如此,这样做在计算上是低效的。链接副本中的答案有许多优越的方法。

标签: python list del


【解决方案1】:

有点创意的解决方案,但这应该可以解决您拥有的索引的问题。

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)

【讨论】:

  • 感谢您的回复。但是,remove 在这里并没有起到正确的作用,因为 remove 是基于列表中的值而不是索引。
  • 您当前的解决方案仅在dstry 从小到大排序时才有效。只需反转列表,您就不必调整索引。
  • 改成你说的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 2013-03-26
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多