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 / istruzione | Rimuove per | Restituisce l'elemento rimosso? | Errore se il target non è presente? |
|---|---|---|---|
list.remove(value) | Prima occorrenza del valore | No | ValueError |
list.pop() | Ultimo elemento (default) | Sì | IndexError su lista vuota |
list.pop(index) | Elemento all'indice | Sì | IndexError se fuori range |
del list[index] | Elemento all'indice | No | IndexError se fuori range |
del list[start:stop] | Slice di elementi | No | Mai (slice vuota è accettata) |
list.clear() | Tutti gli elementi | No | Mai |
| List comprehension | Elementi che soddisfano una condizione | No (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
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
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 listRimuovere 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
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
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 rangeL'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
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 NameErrorIl 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
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, oppuredel 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
- Python Lists — creare, indicizzare e comprendere le basi delle liste
- Access List Items — indicizzazione e slice
- Add List Items —
append(),insert(),extend() - Change List Items — aggiornare valori in-place
- List Comprehension — filtrare e trasformare le liste
- List Methods — riferimento completo di tutti i metodi delle liste
- Remove List Duplicates — deduplicare una lista
- Sort Lists —
sort()esorted()