Подтвердить что ты не робот

Удалить несколько элементов из списка в Python

Итак, например, у меня есть список: myList=["asdf","ghjk","qwer","tyui"]
У меня также есть список номеров индексов элементов, которые я хочу удалить: removeIndexList=[1,3] (я хочу удалить элементы 1 и 3 из списка выше)

Каким будет лучший способ сделать это?

4b9b3361

Ответ 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]