首页 > 解决方案 > 删除多个列表元素,知道它们在 python 中的索引

问题描述

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

my_list = ['zero', 'one', 'two', 'three', 'four']
my_removal_indices = [0, 2, 4]
# what to do
my_list = ['one', 'three']

请注意,类似:

my_list = [item for item in my_list if my_list.index(item) in my_removal_indices]

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

谢谢!

标签: pythonlist

解决方案


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

>>> [val for idx, val in enumerate(my_list) if idx not in my_removal_indices]
['one', 'three']

如果索引列表很长,为了性能也可以切换到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']

推荐阅读