Как удалить элемент из списка по индексу? - PullRequest
1237 голосов
/ 09 марта 2009

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

Я нашел метод list.remove, но сказал, что хочу удалить последний элемент, как мне это сделать? Похоже, что удаление по умолчанию выполняет поиск в списке, но я не хочу, чтобы какой-либо поиск выполнялся.

Ответы [ 19 ]

6 голосов
/ 25 сентября 2017

l - список значений; мы должны удалить индексы из списка inds2rem .

l = range(20)
inds2rem = [2,5,1,7]
map(lambda x: l.pop(x), sorted(inds2rem, key = lambda x:-x))

>>> l
[0, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
6 голосов
/ 28 июня 2016

Как упоминалось ранее, наилучшей практикой является del (); или pop (), если вам нужно знать значение.

Альтернативное решение состоит в том, чтобы повторно сложить только те элементы, которые вы хотите:

    a = ['a', 'b', 'c', 'd'] 

    def remove_element(list_,index_):
        clipboard = []
        for i in range(len(list_)):
            if i is not index_:
                clipboard.append(list_[i])
        return clipboard

    print(remove_element(a,2))

    >> ['a', 'b', 'd']

eta: hmm ... не будет работать с отрицательными значениями индекса, будет обдумывать и обновлять

Полагаю,

if index_<0:index_=len(list_)+index_

исправит это ... но вдруг эта идея кажется очень хрупкой. Интересный мысленный эксперимент. Кажется, должен быть «правильный» способ сделать это с помощью append () / списка.

обдумывая

6 голосов
/ 27 декабря 2016

Не похоже, что вы работаете со списком списков, поэтому я буду кратким. Вы хотите использовать pop, поскольку он удаляет элементы, а не элементы, которые являются списками, для этого следует использовать del. Для вызова последнего элемента в python это "-1"

>>> test = ['item1', 'item2']
>>> test.pop(-1)
'item2'
>>> test
['item1']
5 голосов
/ 04 июня 2017

Используйте функцию "del" :

del listName[-N]

Например, если вы хотите удалить последние 3 элемента, ваш код должен быть:

del listName[-3:]

Например, если вы хотите удалить последние 8 элементов, ваш код должен быть:

del listName[-8:]
1 голос
/ 23 сентября 2018

Или, если нужно удалить несколько индексов:

print([v for i,v in enumerate(your_list) if i not in list_of_unwanted_indexes])

Конечно, тогда тоже можно сделать:

print([v for i,v in enumerate(your_list) if i != unwanted_index])
1 голос
/ 01 февраля 2016

Можно использовать del или pop, но я предпочитаю del, поскольку вы можете указать индекс и срезы, предоставляя пользователю больший контроль над данными.

Например, начиная с показанного списка, можно удалить его последний элемент с del в качестве среза, а затем можно удалить последний элемент из результата, используя pop.

>>> l = [1,2,3,4,5]
>>> del l[-1:]
>>> l
[1, 2, 3, 4]
>>> l.pop(-1)
4
>>> l
[1, 2, 3]
0 голосов
/ 09 февраля 2019

Никогда не используйте pop() с петлей. Это приведет к ошибке. Используйте pop() без петли.

0 голосов
/ 08 марта 2017

Вы можете просто использовать функцию remove Python. Как это:

v = [1, 2, 3, 4, 5, 6]
v.remove(v[4]) # I'm removing the number with index 4 of my array
print(v) # If you want verify the process

# It gave me this:
#[1,2,3,4,6]
0 голосов
/ 13 декабря 2016

Вы можете использовать либо del, либо pop для удаления элемента из списка на основе индекса. Pop распечатает элемент, который он удаляет из списка, в то время как список удалит этот элемент без его печати. ​​

>>> a=[1,2,3,4,5]
>>> del a[1]
>>> a
[1, 3, 4, 5]
>>> a.pop(1)
 3
>>> a
[1, 4, 5]
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...