删除多个列表元素,知道它们在 python 中的索引

MD9*_*D98 3 python list

从只知道项目索引的列表中删除项目的最佳和最 Pythonic 的方法是什么?

my_list = ['zero', 'one', 'two', 'three', 'four']
my_removal_indices = [0, 2, 4]
# what to do
my_list = ['one', 'three']
Run Code Online (Sandbox Code Playgroud)

请注意,类似于:

my_list = [item for item in my_list if my_list.index(item) in my_removal_indices]
Run Code Online (Sandbox Code Playgroud)

不起作用,因为 中的元素my_list可能不是唯一的。此外,当然,当只是迭代时,索引会my_list发生变化。有没有比例如创建一个新的空列表并将所有想要的项目存储在那里并将其设置为my_list之后更好的方法?

谢谢!

Cor*_*mer 7

您可以使用enumerate相应的索引来遍历您的列表。然后根据您的删除列表检查这些索引。

>>> [val for idx, val in enumerate(my_list) if idx not in my_removal_indices]
['one', 'three']
Run Code Online (Sandbox Code Playgroud)

如果索引列表很长,为了性能也可以切换到aset来加速in检查

my_removal_indices = {0, 2, 4}
>>> [val for idx, val in enumerate(my_list) if idx not in my_removal_indices]
['one', 'three']
Run Code Online (Sandbox Code Playgroud)