Modificare gli Elementi di una Lista
Impara a modificare gli elementi di una lista Python con assegnazione per indice, slicing, append(), insert(), extend() e list comprehension.
Le liste Python sono mutabili, il che significa che puoi modificarne il contenuto dopo che sono state create. Questo capitolo illustra ogni tecnica pratica per modificare gli elementi di una lista: assegnazione diretta tramite indice, sostituzione tramite slice, append(), insert(), extend() e list comprehension. Capire quando usare ciascun approccio è fondamentale per scrivere codice Python pulito ed efficiente.
Modificare un singolo elemento tramite indice
Il modo più diretto per cambiare un elemento è assegnare un nuovo valore alla sua posizione di indice. Gli indici delle liste partono da 0.
fruits = ["apple", "banana", "cherry"]
fruits[1] = "mango"
print(fruits)Output:
['apple', 'mango', 'cherry']L'indicizzazione negativa conta dalla fine della lista. L'indice -1 corrisponde all'ultimo elemento, -2 al penultimo, e così via.
colors = ["red", "green", "blue"]
colors[-1] = "yellow"
print(colors)Output:
['red', 'green', 'yellow']Se tenti di assegnare un valore a un indice che non esiste, Python solleva un IndexError. Usa i pattern di accesso alle liste o len() per restare nei limiti.
Sostituire un intervallo di elementi tramite slicing
L'assegnazione tramite slice sostituisce una sezione contigua di una lista con un'altra lista. Lo slice my_list[start:end] seleziona gli elementi dall'indice start fino a (ma non incluso) l'indice end.
Output:
[1, 20, 30, 5]Nota che la lista di sostituzione non deve avere la stessa lunghezza dello slice. In questo caso, tre elementi (2, 3, 4) sono stati sostituiti con due elementi (20, 30), riducendo la lista di uno.
Puoi anche inserire elementi senza rimuoverne alcuno usando uno slice vuoto:
letters = ["a", "b", "e"]
letters[2:2] = ["c", "d"]
print(letters)Output:
['a', 'b', 'c', 'd', 'e']append() — aggiungere un elemento alla fine
Il metodo append() aggiunge un singolo elemento alla fine di una lista e modifica la lista in place. Aggiunge sempre esattamente un elemento, anche se quell'elemento è a sua volta una lista.
Output:
[1, 2, 3, 4, 5]Aggiungere una lista come singolo elemento la annida invece di unirla:
my_list = [1, 2, 3]
my_list.append([4, 5])
print(my_list)Output:
[1, 2, 3, [4, 5]]Usa extend() quando vuoi invece unire tutti gli elementi di un'altra lista.
insert() — aggiungere un elemento in una posizione specifica
Il metodo insert() inserisce un nuovo elemento a un determinato indice, spostando tutti gli elementi successivi di una posizione verso destra.
Output:
[1, 2, 99, 3, 4]insert() non solleva mai un IndexError per posizioni fuori dall'intervallo. Se si passa un indice maggiore della lunghezza della lista, l'elemento viene aggiunto in fondo. Se si passa un indice negativo oltre l'inizio, viene aggiunto all'inizio.
extend() — unire un altro iterabile alla lista
Il metodo extend() aggiunge ogni elemento di un iterabile (lista, tupla, string, ecc.) alla fine della lista. La lista originale cresce in place.
Output:
[1, 2, 3, 4, 5, 6, 7]extend() vs append() a colpo d'occhio:
| Metodo | Cosa aggiunge | Risultato per [1,2] + [3,4] |
|---|---|---|
append([3,4]) | Un elemento (una lista annidata) | [1, 2, [3, 4]] |
extend([3,4]) | Ogni elemento singolarmente | [1, 2, 3, 4] |
List comprehension — trasformare elementi in una nuova lista
La list comprehension crea una nuova lista applicando un'espressione a ogni elemento (con un filtro opzionale). Dopo la comprehension, si riassegna la variabile — la lista originale non viene mutata in place.
Output:
[4, 8, 12]Puoi anche trasformare ogni elemento senza filtrare:
prices = [10.0, 25.5, 8.75]
discounted = [round(p * 0.9, 2) for p in prices]
print(discounted)Output:
[9.0, 22.95, 7.88]Usa la list comprehension quando vuoi un'istruzione compatta e leggibile per produrre una copia modificata di una lista.
Scegliere l'approccio giusto
| Obiettivo | Metodo migliore |
|---|---|
| Modificare un elemento in una posizione nota | Assegnazione per indice list[i] = value |
| Sostituire un intervallo di elementi | Assegnazione tramite slice list[a:b] = new_items |
| Aggiungere un elemento alla fine | append() |
| Aggiungere un elemento in una posizione specifica | insert(index, value) |
| Unire tutti gli elementi di un altro iterabile | extend() |
| Produrre una copia modificata in base a una regola | List comprehension |
Per rimuovere elementi da una lista, vedi Rimuovere Elementi da una Lista. Per ordinare una lista in place, vedi Ordinare le Liste. Per un riferimento completo di tutti i metodi delle liste, vedi Metodi delle Liste.