Corso Python / Liste: aggiungere, modificare, eliminare e ordinare elementi
Una lista Python conserva elementi in ordine e permette di aggiungerli, modificarli e rimuoverli. Distingui sempre un’operazione che cambia la lista originale da una che restituisce una nuova lista: la differenza è particolarmente importante con ordinamento e copie.
Scegliere come aggiungere e rimuovere gli elementi
Una lista si crea con parentesi quadre, come [3500, 8000, 2500]. L’indice iniziale è 0 e puoi assegnare un nuovo valore a una posizione esistente. Può contenere duplicati e tipi diversi; per calcolare un totale, però, mantieni significato e unità coerenti. Una lista di numeri e descrizioni non può essere sommata come una lista di importi.
| Obiettivo | Codice | Comportamento |
|---|---|---|
| Aggiungere un elemento in fondo | items.append(value) |
Una lista passata come valore diventa un solo elemento annidato. |
| Aggiungere più elementi | items.extend(values) |
Aggiunge uno alla volta gli elementi di un iterabile. |
| Rimuovere per posizione | items.pop(index) |
Restituisce l’elemento rimosso; senza indice usa l’ultimo. |
| Rimuovere per valore | items.remove(value) |
Rimuove solo la prima corrispondenza; se manca genera un errore. |
Per esempio, aggiungere [2, 3] con append a [1] produce [1, [2, 3]], mentre extend produce [1, 2, 3]. Consulta la guida ufficiale ai metodi delle liste per i dettagli delle singole operazioni.
Eseguire modifiche e ordinamenti in un esempio completo
Salva il programma seguente in UTF-8 come lists.py, in una cartella di esercitazione. Esegui python lists.py con l’interprete del progetto selezionato. Fuori dall’ambiente virtuale su macOS o Ubuntu, usa python3 se è il comando dell’interprete scelto. Il programma usa solo funzioni predefinite.
amounts = [3500, 8000, 2500]
amounts.append(1000)
amounts[0] = 4000
removed = amounts.pop()
print(amounts, removed)
print(sorted(amounts))
print(amounts)
amounts.sort()
print(amounts)
Il risultato atteso è:
[4000, 8000, 2500] 1000
[2500, 4000, 8000]
[4000, 8000, 2500]
[2500, 4000, 8000]
Prima viene aggiunto 1000, poi il valore in posizione 0 passa da 3500 a 4000. pop() rimuove l’ultimo elemento e lo conserva in removed, perciò la prima stampa mostra tre importi e il valore 1000 separato. La seconda stampa mostra un nuovo ordine calcolato da sorted(), ma la terza dimostra che amounts non è ancora cambiata. Solo dopo amounts.sort() l’ordine della lista originale è diverso.
Distinguere ordinamento, assegnazione e copia
| Operazione | Risultato restituito | Effetto sull’originale |
|---|---|---|
items.sort() |
None |
Ordina la stessa lista. |
sorted(items) |
Una nuova lista | Conserva l’ordine originale. |
Non scrivere items = items.sort(): la lista viene ordinata, ma poi il nome items viene associato a None. Usa items.sort() da solo per cambiare l’originale oppure assegna il risultato di sorted(items) a un altro nome per mantenere entrambe le versioni.
other = amounts non crea una copia: associa un secondo nome alla stessa lista. Una modifica tramite other sarà quindi visibile anche tramite amounts. Con copied = amounts[:] crei invece una copia superficiale, cioè una nuova lista esterna che contiene riferimenti agli stessi elementi. Evita di chiamare la variabile list o sorted, perché nasconderesti i nomi predefiniti.
Se la lista contiene a sua volta altre liste, la copia superficiale continua a condividere quegli oggetti interni. Cambiare un elemento dentro una lista annidata può dunque comparire in entrambe le versioni; sostituire una posizione della lista esterna no. Anche sorted() non esegue una copia profonda degli elementi. La documentazione sulle copie superficiali e profonde chiarisce questa distinzione.
Controllare liste vuote e modifiche durante un ciclo
Leggere items[0] o chiamare items.pop() quando items è vuota genera IndexError. remove() genera invece ValueError quando il valore richiesto non è presente. Decidi se l’assenza di elementi è un caso normale da gestire o un requisito violato, anziché considerare sempre disponibile una posizione.
Rimuovere elementi dalla stessa lista che stai attraversando può saltare valori: dopo una rimozione gli elementi successivi cambiano indice. Per esempio, provare a eliminare tutti gli 1 da [1, 1, 2] attraversando quella stessa lista può lasciarne uno. Quando serve, attraversa una copia o costruisci una nuova lista con gli elementi da conservare.
- Aggiungi uno zero alla lista iniziale del programma. Osserva che, dopo le altre modifiche, l’ordinamento contiene lo zero mentre la somma resta uguale a quella senza zero.
- Confronta il numero di elementi oltre al totale: una somma invariata non implica dati identici.
- Rimuovi lo zero aggiunto e riesegui il file per ritrovare esattamente il risultato originale.
L’ordine e il contenuto sono proprietà diverse dal valore aggregato. Prima di modificare una lista, scegli quale proprietà vuoi conservare e se le altre parti del programma devono vedere la stessa modifica.




