Come rimuovere il primo oggetto da un elenco?


Risposte:


1261

Elenco Python

list.pop (indice)

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

del list [indice]

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

Entrambi modificano l'elenco originale.

Altri hanno suggerito di utilizzare l'affettatura:

  • Copia l'elenco
  • Può restituire un sottoinsieme

Inoltre, se stai eseguendo molti pop (0), dovresti guardare collezioni.deque

from collections import deque
>>> l = deque(['a', 'b', 'c', 'd'])
>>> l.popleft()
'a'
>>> l
deque(['b', 'c', 'd'])
  • Fornisce prestazioni più elevate dall'estremità sinistra dell'elenco

Puoi anche usare indici negativi, che hanno lo stesso significato che con le liste.
Gabriel Devillers,

189

affettare:

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

Che effettivamente restituirebbe un sottoinsieme dell'originale ma non lo modificherà.


17
se xè vuoto, x=x[1:]lo lascerebbe vuoto senza lamentarsi. x.pop(0)getterebbe per un elenco vuoto x. A volte lanciare è ciò che si vuole: se il presupposto che ci sia almeno un elemento nell'elenco è sbagliato, si potrebbe desiderare di essere avvisati.
Il

Grazie per questo! Questa è una risposta migliore, imo, perché non è distruttiva
Hee Jin,


29

Con la suddivisione in elenchi, consulta il tutorial di Python sugli elenchi per maggiori dettagli:

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

29

lo faresti e basta

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

o l = l[1:]

Pro e contro

Usando pop è possibile recuperare il valore

dire x = l.pop(0) xsarebbe0


15

Quindi cancellalo:

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

8

È possibile utilizzare list.reverse()per invertire l'elenco, quindi list.pop()per rimuovere l'ultimo elemento, ad esempio:

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

Puoi anche usare list.remove(a[0])per popestrarre il primo elemento nell'elenco.

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

3
OP non sta chiedendo il modo migliore per farlo. Questo è solo un altro approccio per ottenere lo stesso!
vertice

1
Sì, un altro approccio che non ha alcun vantaggio rispetto alle altre risposte. Ci sono molti modi per farlo. Perché non dare una risposta a.remove(a[1-1])? Questo è un altro modo.
Ned Batchelder,

2
Il mio punto è che la tua risposta è peggio dell'altra e non ha nulla da raccomandare. Non c'è motivo di usare questa risposta sugli altri. Solo perché è "un altro modo" non è un motivo per aggiungerlo qui.
Ned Batchelder,

4
@NedBatchelder Il tuo punto è controverso. È un metodo aggiuntivo disponibile per gli elenchi in Python, specifico per questa particolare attività, e per motivi di completezza va notato. Il BS inventato un esempio [1-1], d'altra parte, non lo è. Per non parlare del fatto che la sua risposta non è "peggiore delle altre" in alcun modo.
Hejazzman,

8
Rispondo la mia domanda: questo sembra strano e inventato, e non ha nulla da raccomandare. In effetti, la prima frase è fuorviante, perché non è possibile rimuovere l'i elemento con list.remove(a[i]). Con valori duplicati, potrebbe trovare un elemento precedente con lo stesso valore e rimuoverlo invece dell'i.
Ned Batchelder

4

Se lavori con numpy devi usare il metodo di eliminazione :

import numpy as np

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

a = np.delete(a, 0)

print(a) # [2 3 4 5]

1

Esiste una struttura dati chiamata "deque" o coda a doppia estremità che è più veloce ed efficiente di un elenco. Puoi usare la tua lista e convertirla in deque e fare le trasformazioni richieste in essa. Puoi anche riconvertire il deque nella lista.

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 fornisce anche funzioni molto utili come l'inserimento di elementi su entrambi i lati dell'elenco o su qualsiasi indice specifico. Puoi anche ruotare o invertire un deque. Provaci!!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.