W3docs

Rimuovere elementi da una lista

Tutti i metodi per rimuovere elementi da una lista Python: remove(), pop(), del, clear() e list comprehension, con esempi e avvertenze.

Le liste Python sono sequenze mutabili, quindi è possibile eliminare elementi in qualsiasi momento. Questo capitolo illustra ogni strumento integrato per rimuovere elementi da una lista: remove(), pop(), l'istruzione del, clear() e le list comprehension. Ogni approccio è adatto a una situazione diversa, e sapere quale scegliere evita bug comuni.

Riferimento rapido

Metodo / istruzioneRimuove perRestituisce l'elemento rimosso?Errore se il target non è presente?
list.remove(value)Prima occorrenza del valoreNoValueError
list.pop()Ultimo elemento (default)IndexError su lista vuota
list.pop(index)Elemento all'indiceIndexError se fuori range
del list[index]Elemento all'indiceNoIndexError se fuori range
del list[start:stop]Slice di elementiNoMai (slice vuota è accettata)
list.clear()Tutti gli elementiNoMai
List comprehensionElementi che soddisfano una condizioneNo (restituisce una nuova lista)Mai

Il metodo remove()

list.remove(value) trova la prima occorrenza di value e la elimina. Se il valore non è presente, Python solleva un ValueError.

Rimuovere un elemento tramite il suo valore

python— editable, runs on the server

Viene rimossa solo la prima occorrenza

Quando un valore compare più volte, remove() elimina solo il primo e lascia gli altri:

my_list = [1, 3, 2, 3, 4, 3]
my_list.remove(3)
print(my_list)  # [1, 2, 3, 4, 3]

Proteggere il codice da ValueError

Verificare sempre che il valore esista prima di chiamare remove(), oppure gestire l'eccezione:

Controllare con in prima di rimuovere

python— editable, runs on the server

Catturare l'eccezione

my_list = [1, 2, 4, 5]
try:
    my_list.remove(3)
except ValueError:
    print("3 is not in the list")
# Output: 3 is not in the list

Rimuovere tutte le occorrenze con un ciclo

Usare un ciclo while per continuare a rimuovere un valore finché non ne rimane nessuno:

Rimuovere ogni occorrenza di un elemento

python— editable, runs on the server

Il metodo pop()

list.pop(index) rimuove l'elemento all'index e lo restituisce, così da poter usare il valore. Se si omette l'indice, rimuove e restituisce l'ultimo elemento. Questo rende pop() ideale quando è necessario elaborare il valore rimosso.

Rimuovere l'ultimo elemento

python— editable, runs on the server

Rimuovere un elemento a un indice specifico

my_list = [1, 2, 3, 4, 5]
item = my_list.pop(1)   # removes and returns 2
print(item)             # 2
print(my_list)          # [1, 3, 4, 5]

IndexError con pop()

Chiamare pop() su una lista vuota o con un indice fuori dal range solleva un IndexError:

empty = []
empty.pop()   # IndexError: pop from empty list

my_list = [1, 2, 3]
my_list.pop(10)   # IndexError: pop index out of range

L'istruzione del

del rimuove un elemento (o uno slice di elementi) da una lista per posizione, senza restituire nulla.

Eliminare un singolo elemento tramite indice

Rimuovere l'elemento all'indice 2

python— editable, runs on the server

Eliminare uno slice di elementi

del accetta la stessa notazione slice dell'indicizzazione, rendendo semplice rimuovere un intervallo di elementi in un solo passaggio:

my_list = [1, 2, 3, 4, 5]
del my_list[1:3]   # removes index 1 and 2 (values 2 and 3)
print(my_list)     # [1, 4, 5]

Eliminare uno slice vuoto o fuori dai limiti non genera mai un errore: semplicemente non ha effetto.

Eliminare l'intera variabile lista

del può anche rimuovere la variabile lista stessa, non solo il suo contenuto:

my_list = [1, 2, 3]
del my_list
# my_list is now undefined; referencing it raises NameError

Il metodo clear()

list.clear() rimuove ogni elemento dalla lista, lasciandola vuota. L'oggetto lista stesso continua ad esistere (a differenza di del my_list).

my_list = [1, 2, 3, 4, 5]
my_list.clear()
print(my_list)  # []

clear() è equivalente a del my_list[:] (eliminare l'intero slice), ma è più leggibile.

List comprehension per la rimozione condizionale

La list comprehension costruisce una nuova lista includendo solo gli elementi che soddisfano una condizione, filtrando di fatto quelli da rimuovere. È il modo più chiaro per eliminare tutti gli elementi che corrispondono a una condizione complessa.

Rimuovere tutte le occorrenze di un valore

python— editable, runs on the server

Rimuovere tutti i numeri pari

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
odd_only = [x for x in numbers if x % 2 != 0]
print(odd_only)  # [1, 3, 5, 7]

Poiché una comprehension restituisce una nuova lista invece di modificare quella originale, è sicura da usare quando si vuole mantenere l'originale invariata, o quando la condizione di filtro riguarda più valori contemporaneamente.

Scegliere l'approccio giusto

  • Conosci il valore, non l'indice? Usa remove() (prima occorrenza) oppure una list comprehension (tutte le occorrenze o condizioni complesse).
  • Conosci l'indice? Usa pop(index) se hai bisogno del valore restituito, oppure del list[index] se non ti serve.
  • Hai bisogno di svuotare l'intera lista? Usa clear().
  • Hai bisogno di rimuovere un intervallo di elementi consecutivi? Usa del list[start:stop].

Capitoli correlati

Esercitazione

Pratica
Quale dei seguenti può essere usato per rimuovere elementi da una lista Python?
Quale dei seguenti può essere usato per rimuovere elementi da una lista Python?
Was this page helpful?