Удалить несколько элементов из списка в Python
Итак, например, у меня есть список: myList=["asdf","ghjk","qwer","tyui"]
У меня также есть список номеров индексов элементов, которые я хочу удалить: removeIndexList=[1,3]
(я хочу удалить элементы 1 и 3 из списка выше)
Каким будет лучший способ сделать это?
Ответы
Ответ 1
Используйте понимание списка с помощью enumerate()
:
newlist = [v for i, v in enumerate(oldlist) if i not in removelist]
создание removelist
a set
вместо этого поможет ускорить работу:
removeset = set(removelist)
newlist = [v for i, v in enumerate(oldlist) if i not in removeset]
Демо:
>>> oldlist = ["asdf", "ghjk", "qwer", "tyui"]
>>> removeset = set([1, 3])
>>> [v for i, v in enumerate(oldlist) if i not in removeset]
['asdf', 'qwer']
Ответ 2
Очевидный способ не будет работать:
list=["asdf","ghjk","qwer","tyui"]
removelist=[1,3]
for index in removelist:
del list[index]
Проблема в том, что после того, как вы удалили # 1, "ghjk", все после этого переместится вперед. Итак, # 3 больше не "tyui", он находится за концом списка.
Вы можете решить это, убедившись, что вы идете назад:
list=["asdf","ghjk","qwer","tyui"]
removelist=[1,3]
for index in sorted(removelist, reverse=True):
del list[index]
Однако, как правило, лучше просто создать новый отфильтрованный список, как это было предложено Martijn Pieters:
list = [v for i, v in enumerate(list) if i not in removelist]