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

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

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

2 Solutions collect form web for “Удалить несколько элементов из списка в Python”

Используйте представление списка с enumerate() :

 newlist = [v for i, v in enumerate(oldlist) if i not in removelist] 

вместо того, чтобы сделать removelist 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'] 

Очевидный способ не будет работать:

 list=["asdf","ghjk","qwer","tyui"] removelist=[1,3] for index in removelist: del list[index] 

Проблема в том, что после того, как вы удалили # 1, «ghjk», все после этого переместится вперед. Так что # 3 больше не «тюй», это конец списка.


Вы можете решить это, убедившись, что вы идете назад:

 list=["asdf","ghjk","qwer","tyui"] removelist=[1,3] for index in sorted(removelist, reverse=True): del list[index] 

Однако, как правило, лучше просто создать новый отфильтрованный список, как предположил Мартин Пайтерс:

 list = [v for i, v in enumerate(list) if i not in removelist] 
  • Нарезка списка и группы
  • Домашнее задание Python - создание нового списка
  • Записать список кортежей в txt-файл
  • python удаляет элементы списка из другого списка. С МНОЖЕСТВЕННЫМИ ВОЗВРАТАМИ элементов в обоих
  • Перечислить преобразование массива
  • Преобразование Python '\' в '\\'
  • Найти структуру кортежа, содержащую неизвестное значение внутри списка
  • Prayon Array Slice с запятой?
  • Python - лучший язык программирования в мире.