В Python, каков наилучший способ удалить элементы из списка по индексу при условии, что новый список не создается? - PullRequest
0 голосов
/ 18 февраля 2019

Я хотел бы удалить все элементы, соответствующие индексу, из другого списка.Например,

my_lst = [100,200,300,400,500,600,700,800,900,1000]

Я хотел бы удалить элементы по индексам idxs = [1,3,9,6,4].

Что такоепредпочтительный способ сделать это при условии, что сам список должен быть изменен (т. е. не генерировать новый список - так что нет списочных представлений)?

По сути, к какому из них я ближе всего могу прийти

del my_lst [idxs]

[100,300,600,700,800,900]

Проблема заключается в том, что при удалении элемента индекс с этого момента смещается.Поэтому такие решения, как this не будут работать.Я посмотрел и другие решения.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

my_lst = [100,200,300,400,500,600,700,800,900,1000]

idxs = [1,3,9,6,4]

for i in range(0,len(idxs)):
    my_lst[idxs[i]]='d'

my_lst = [x for x in my_lst if x != 'd']
0 голосов
/ 18 февраля 2019

Сначала можно удалить более поздние индексы, чтобы их положение не сдвигалось, сначала удалив меньшие:

my_lst = [0,100,200,300,400,500,600,700,800,900,1000]  # added 0 index number


# sort reversed: 9,6,4,3,1 
for i in sorted([1,3,9,6,4], reverse=True):
    del my_lst[i]

print(my_lst)

Вывод:

[0, 200, 500, 700, 800, 1000]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...