Jak usunąć pierwszy przedmiot z listy?


772

Mam listę [0, 1, 2, 3, 4], do której chciałbym się dostać [1, 2, 3, 4]. Jak mam to zrobić?

Odpowiedzi:


1256

Lista Python

list.pop (indeks)

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

del list [indeks]

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

Oba modyfikują oryginalną listę.

Inni sugerują stosowanie krojenia:

  • Kopiuje listę
  • Może zwrócić podzbiór

Ponadto, jeśli wykonujesz wiele popów (0), powinieneś spojrzeć na kolekcje.deque

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
  • Zapewnia wyższą wydajność wyskakującą z lewego końca listy

Możesz także użyć indeksów ujemnych, które mają takie samo znaczenie jak w przypadku list.
Gabriel Devillers

189

Krajanie na plastry:

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

Który faktycznie zwróciłby podzbiór oryginału, ale go nie zmodyfikował.


16
jeśli xjest pusty, x=x[1:]pozostawiłby go pusty bez narzekania. x.pop(0)rzuciłby na pustą listę x. Czasami chce się rzucać: jeśli założenie, że na liście jest przynajmniej element, jest błędne, ktoś może chcieć otrzymać powiadomienie.
ead

Dzięki za to! To lepsza odpowiedź, imo, ponieważ nie jest destrukcyjna
Hee Jin


29

W przypadku wycinania list więcej szczegółów znajdziesz w samouczku Python na temat list :

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

29

po prostu to zrobiłbyś

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

lub l = l[1:]

Plusy i minusy

Za pomocą pop możesz odzyskać wartość

powiedz, x = l.pop(0) xże będzie0


15

Następnie po prostu usuń:

x = [0, 1, 2, 3, 4]
del x[0]
print x
# [1, 2, 3, 4]

8

Możesz użyć list.reverse()do odwrócenia listy, a następnie list.pop()do usunięcia ostatniego elementu, na przykład:

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

Możesz także użyć list.remove(a[0])do popwyrzucenia pierwszego elementu z listy.

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

3
OP nie pyta o najlepszy sposób na zrobienie tego. To tylko kolejne podejście do osiągnięcia tego samego!
vertexion

1
Tak, inne podejście, które nie ma przewagi nad innymi odpowiedziami. Można to zrobić na wiele sposobów. Dlaczego nie dać odpowiedzi a.remove(a[1-1])? To inny sposób.
Ned Batchelder

2
Chodzi mi o to, że twoja odpowiedź jest gorsza niż inne odpowiedzi i nie ma nic, co by ją polecało. Nie ma powodu, aby używać tej odpowiedzi w stosunku do innych. To, że jest to „inny sposób”, nie jest powodem do dodania go tutaj.
Ned Batchelder

4
@NedBatchelder Twój punkt jest dyskusyjny. Jest to dodatkowa metoda dostępna dla list w Pythonie, specyficzna dla tego konkretnego zadania, i dla kompletności należy zauważyć. Z kolei wymyślony przykład BS a [1-1] nie jest. Nie wspominając już o tym, że jego odpowiedź w żaden sposób nie jest „gorsza od innych odpowiedzi”.
Hejazzman,

8
Podtrzymuję moje pytanie: wydaje się to dziwne i wymyślone i nie ma nic, co by go polecało. W rzeczywistości pierwsze zdanie jest mylące, ponieważ nie można usunąć i-tego elementu za pomocą list.remove(a[i]). Przy zduplikowanych wartościach może znaleźć wcześniejszy element o tej samej wartości i usunąć go zamiast i-tego.
Ned Batchelder

4

Jeśli pracujesz z Numpy , musisz użyć metody usuwania :

import numpy as np

a = np.array([1, 2, 3, 4, 5])

a = np.delete(a, 0)

print(a) # [2 3 4 5]

1

Istnieje struktura danych o nazwie „deque” lub kolejka dwustronna, która jest szybsza i wydajniejsza niż lista. Możesz użyć swojej listy i przekonwertować ją na deque i dokonać w niej wymaganych przekształceń. Możesz także przekonwertować deque z powrotem na listę.

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 zapewnia również bardzo przydatne funkcje, takie jak wstawianie elementów po obu stronach listy lub do dowolnego określonego indeksu. Możesz także obracać lub cofać deque. Spróbuj!!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.