Le liste sono sequenze ordinate e modificabili
La lista è il tipo di collezione più usato in Python. Se devi tenere un insieme ordinato di valori che potrebbe cambiare (aggiungere, rimuovere, ordinare, aggiornare), una lista è quasi sempre la scelta giusta.
Ne crei una con le parentesi quadre:
Le liste possono contenere qualsiasi cosa, perfino altre liste. In pratica, la maggior parte delle liste finisce per contenere un solo tipo di cosa (una lista di utenti, una lista di numeri), perché è la soluzione più semplice da gestire mentalmente.
Indicizzazione
Ogni elemento ha una posizione, a partire da 0. Vi accedi con le parentesi quadre:
Chiedere un indice che non esiste solleva IndexError. Se rischi di uscire dall'intervallo, controlla prima la lunghezza oppure metti l'accesso dentro un try.
Slicing
Lo slicing ti restituisce un intervallo di elementi. La sintassi è list[start:stop:step], la stessa delle stringhe:
Due cose da fissare bene:
- Lo slicing restituisce sempre una nuova lista. Modificare la slice non tocca l'originale.
- L'indice di stop è escluso:
nums[2:5]ti dà gli indici 2, 3 e 4, non il 5.
Come usare append, extend e insert
I tre metodi per "aggiungere a una lista" fanno cose diverse, e confonderli è una fonte comune di bug:
append(x)aggiungexcome singolo elemento, anche sexè una lista.items.append([1, 2])aggiunge la lista stessa come un'unica voce.extend(iterable)aggiunge ogni elemento preso dall'iterabile.items.extend([1, 2])aggiunge due voci.insert(i, x)inserisce a un indice preciso, spostando di una posizione in avanti tutto ciò che si trova inio dopo.
+= con una lista a destra funziona come extend:
E per rimuovere:
Se provi a fare remove() di qualcosa che non è nella lista, Python solleva ValueError. Se ti serve "rimuovi se presente", controlla prima con in oppure usa un try.
Puoi anche eliminare per indice con del:
Lunghezza, appartenenza, conteggio
in è il modo leggibile per verificare se una lista contiene un valore. Se farai questa domanda molte volte su una lista grande, usa invece un set: l'appartenenza in un set è O(1), in una lista è O(n).
Ordinamento
Due modi, e la scelta conta:
Entrambi accettano reverse=True per l'ordine decrescente:
E una funzione key per un ordinamento personalizzato:
key viene applicata a ogni elemento, e il risultato è ciò che viene confrontato. Casi comuni: ordinare per lunghezza, per un attributo specifico o per la versione in minuscolo di una stringa.
Invertire
Tre varianti, a seconda di ciò che ti serve:
Usa la versione sul posto quando l'originale non ti serve. Usa lo slicing quando vuoi una nuova copia. Usa reversed() quando devi solo scorrere al contrario senza creare una nuova lista.
La trappola del riferimento condiviso
Le liste sono mutabili e le variabili sono riferimenti. Questo significa che due variabili possono puntare alla stessa lista:
b = a non ha copiato la lista: ha reso b un secondo nome per la stessa lista. Se vuoi una copia, chiedila esplicitamente:
Prima o poi ci casca chiunque programmi in Python. Ricorda: = tra due liste non copia.
Scorrere e costruire
Conosci già lo schema di base dalla pagina sul ciclo for:
È leggibile e andrà sempre bene. Quando ti senti a tuo agio, la list comprehension equivalente fa la stessa cosa in una riga:
Vedremo le comprehension nel dettaglio fra due pagine.
Promemoria veloce
I metodi da conoscere, a colpo d'occhio:
append(x): aggiunge in fondoextend(iter): aggiunge ogni elemento di un iterabileinsert(i, x): inserisce all'indice ipop()/pop(i): rimuove e restituisceremove(x): rimuove la prima occorrenza di xsort()/sort(key=...)/sort(reverse=True)reverse()index(x): posizione del primo xcount(x): quante volte compare xcopy(): copia superficiale
Prossimo argomento
Le liste sono il cavallo da tiro. Ora vedremo le tuple, le loro cugine immutabili, e quando conviene scegliere una tupla.
Domande frequenti
Come creo una lista in Python?
Usa le parentesi quadre con valori separati da virgole: fruits = ['apple', 'banana', 'cherry']. Le liste possono contenere qualsiasi tipo e puoi anche mescolare tipi diversi nella stessa lista, anche se per abitudine la maggior parte delle liste reali è omogenea.
Come ordino una lista in Python?
Chiama .sort() sulla lista per ordinarla sul posto, oppure usa la funzione integrata sorted(list) per ottenere una nuova lista ordinata senza modificare l'originale. Entrambe accettano il flag reverse=True per l'ordine decrescente e un argomento key= per chiavi di ordinamento personalizzate.
Come inverto una lista in Python?
list.reverse() inverte sul posto. list[::-1] restituisce una nuova lista invertita. reversed(list) restituisce un iteratore da scorrere con un ciclo. Scegli in base a ciò che ti serve: modifica sul posto, nuova copia o iterazione pigra.