【问题标题】:How to delete elements from a list using a list of indexes? [duplicate]如何使用索引列表从列表中删除元素? [复制]
【发布时间】:2016-12-03 11:59:07
【问题描述】:

如果我有以下元素列表:

list = ['one', 'two', 'three', 'four']

我还有另一个列表,其中包含我需要从上面的列表中删除的索引:

to_delete = [0,2]

如何使用to_deletelist 中删除这些元素?使用for 循环不起作用,因为很明显,当您从列表中删除一个元素时,每个剩余元素的索引都会更改。

我能做什么?

【问题讨论】:

  • 你能做什么?你试过什么?
  • 我想我们几个小时前刚刚遇到过这样一个问题。
  • 如果 to_delete 已排序,您可以按照您的建议使用 for 循环以相反的顺序删除
  • @WillMolter:不过,这可能需要二次元素移位。
  • @user2357112 当然可以,但是如果列表很小,谁在乎呢?

标签: python


【解决方案1】:

您可以将enumerate 与条件列表推导一起使用来生成一个新列表,其中包含不在to_delete 索引位置的my_list 的每个元素。

my_list = ['one', 'two', 'three', 'four']
to_delete = [0,2]

new_list = [val for n, val in enumerate(my_list) if n not in to_delete]

>>> new_list
['two', 'four']

【讨论】:

  • 不确定如何不赞成,因为它是最好的方法,除非您应该为大型列表设置 to_delete
【解决方案2】:

使用列表理解过滤:

 [ my_list[i] for i in range(len(my_list)) if i not in to_delete ] 

【讨论】:

  • 你不想用那个名字list
  • @MosesKoledoye 以下 OP 命名。
  • 这仍然是个坏主意。如果 OP 做错了什么,请修复它,不要忽略它。