Как удалить первый элемент из списка?


773

У меня есть список, в который [0, 1, 2, 3, 4]я хотел бы войти [1, 2, 3, 4]. Как мне это сделать?

Ответы:


1261

Список Python

list.pop (индекс)

>>> l = ['a', 'b', 'c', 'd']
>>> l.pop(0)
'a'
>>> l
['b', 'c', 'd']
>>> 

список дел [индекс]

>>> l = ['a', 'b', 'c', 'd']
>>> del l[0]
>>> l
['b', 'c', 'd']
>>> 

Они оба изменяют ваш первоначальный список.

Другие предложили использовать нарезку:

  • Копирует список
  • Может вернуть подмножество

Кроме того, если вы выполняете много pop (0), вы должны посмотреть на collection.deque

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
  • Обеспечивает более высокую производительность выскочить из левого конца списка

Вы также можете использовать отрицательные индексы, которые имеют то же значение, что и со списками.
Габриэль Devillers

189

нарезка:

x = [0,1,2,3,4]
x = x[1:]

Который на самом деле возвращает подмножество оригинала, но не изменяет его.


17
если xпуст, x=x[1:]оставил бы его пустым, не жалуясь. x.pop(0)бросил бы для пустого списка x. Иногда бросать - это то, что нужно: если предположение о том, что в списке есть хотя бы один элемент, неверно, можно получить уведомление.
Свинец

Спасибо за это! Это лучший ответ, IMO, потому что это не разрушительно
Хи Джин


29

С нарезкой списков, см. Руководство Python о списках для более подробной информации:

>>> l = [0, 1, 2, 3, 4]
>>> l[1:]
[1, 2, 3, 4]

29

ты бы просто сделал это

l = [0, 1, 2, 3, 4]
l.pop(0)

или l = l[1:]

Плюсы и минусы

С помощью pop вы можете получить значение

скажем x = l.pop(0) x, будет0



8

Вы можете использовать, list.reverse()чтобы перевернуть список, а затем list.pop()удалить последний элемент, например:

l = [0, 1, 2, 3, 4]
l.reverse()
print l
[4, 3, 2, 1, 0]


l.pop()
0
l.pop()
1
l.pop()
2
l.pop()
3
l.pop()
4

5

Вы можете также использовать list.remove(a[0])для popиз первого элемента в списке.

>>>> a=[1,2,3,4,5]
>>>> a.remove(a[0])
>>>> print a
>>>> [2,3,4,5]

3
ОП не спрашивает о лучшем способе сделать это. Это просто еще один подход для достижения того же!
вершина

1
Да, другой подход, который не имеет преимуществ перед другими ответами. Есть много способов сделать это. Почему бы не дать ответ a.remove(a[1-1])? Это другой способ.
Нед Бэтчелдер

2
Я хочу сказать, что ваш ответ хуже, чем другие, и ему нечего рекомендовать. Нет причин использовать этот ответ над остальными. Просто потому, что это «другой способ», не повод добавлять его сюда.
Нед Бэтчелдер

4
@NedBatchelder Вашего пункта является спорным. Это дополнительный метод, доступный для списков в Python, специфичный для этой конкретной задачи, и для полноты изложения это следует отметить. Придуманный пример BS [1-1], с другой стороны, это не так. Не говоря уже о том, что его ответ никак не «хуже, чем другие ответы».
Hejazzman

8
Я поддерживаю свой вопрос: это кажется странным и надуманным, и ему нечего рекомендовать. На самом деле, первое предложение вводит в заблуждение, потому что вы не можете удалить i-й элемент с помощью list.remove(a[i]). С дублирующимися значениями он может найти более ранний элемент с тем же значением и удалить его вместо i-го.
Нед Бэтчелдер,


1

Существует структура данных, называемая «deque» или двусторонняя очередь, которая работает быстрее и эффективнее, чем список. Вы можете использовать свой список и преобразовать его в deque и выполнить необходимые преобразования в нем. Вы также можете конвертировать обратно в список.

import collections
mylist = [0, 1, 2, 3, 4]

#make a deque from your list
de = collections.deque(mylist)

#you can remove from a deque from either left side or right side
de.popleft()
print(de)

#you can covert the deque back to list
mylist = list(de)
print(mylist)

Deque также предоставляет очень полезные функции, такие как вставка элементов в любую сторону списка или в любой конкретный индекс. Вы также можете повернуть или перевернуть деку. Попробуйте!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.