Liste Python: Una Guida Completa
Impara le liste Python: creazione, accesso, slicing, modifica, ordinamento e list comprehension. Tutti i metodi integrati con esempi eseguibili.
Questa pagina copre tutto quello che devi sapere sulle liste Python — come crearle, leggere e modificarne il contenuto, usare lo slicing, applicare i metodi integrati, scrivere list comprehension, lavorare con liste annidate e decomprimere i valori in variabili.
Cos'è una Lista Python?
Una lista è la struttura dati integrata più versatile di Python. Memorizza una sequenza ordinata di elementi, dove ogni elemento può essere di qualsiasi tipo: un numero, una string, un boolean, un'altra lista o qualsiasi object. Le liste sono:
- Ordinate — gli elementi mantengono la posizione che viene loro assegnata.
- Mutabili — puoi aggiungere, rimuovere o modificare elementi dopo che la lista è stata creata.
- Indicizzate — ogni elemento ha un indice intero che inizia da
0. - Eterogenee — una singola lista può contenere valori di tipi diversi.
Crea una lista con le parentesi quadre, separando gli elementi con virgole:
Una lista vuota si scrive come []. Le liste possono contenere anche tipi misti:
mixed = [42, 'hello', True, 3.14, None]
print(mixed)
# [42, 'hello', True, 3.14, None]Accesso agli Elementi della Lista
Indicizzazione Positiva
Accedi a un elemento tramite la sua posizione in base zero all'interno delle parentesi quadre:
Indicizzazione Negativa
Gli indici negativi contano all'indietro dalla fine. -1 è l'ultimo elemento, -2 il penultimo, e così via — utile quando conosci la posizione dalla fine ma non la lunghezza totale:
Slicing
Uno slice estrae una sotto-lista utilizzando la sintassi list[start:stop:step]. L'indice stop è esclusivo (non incluso).
fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']
print(fruits[1:4]) # ['banana', 'cherry', 'date']
print(fruits[:2]) # ['apple', 'banana'] — start defaults to 0
print(fruits[2:]) # ['cherry', 'date', 'elderberry'] — stop defaults to end
print(fruits[::2]) # ['apple', 'cherry', 'elderberry'] — every other item
print(fruits[::-1]) # ['elderberry', 'date', 'cherry', 'banana', 'apple'] — reversed copyLo slicing restituisce sempre una nuova lista e non solleva mai un IndexError, anche se gli indici sono fuori intervallo.
Modifica degli Elementi della Lista
Poiché le liste sono mutabili, puoi assegnare un nuovo valore a qualsiasi indice:
Puoi anche sostituire un intervallo di elementi usando l'assegnazione tramite slice:
nums = [1, 2, 3, 4, 5]
nums[1:3] = [20, 30]
print(nums)
# [1, 20, 30, 4, 5]Aggiunta di Elementi
append() — Aggiungi alla Fine
append() aggiunge un singolo elemento alla fine della lista in place:
insert() — Aggiungi in una Posizione Specifica
insert(index, value) inserisce un nuovo elemento prima dell'indice indicato senza rimuovere nulla:
fruits = ['apple', 'banana', 'cherry']
fruits.insert(1, 'mango')
print(fruits)
# ['apple', 'mango', 'banana', 'cherry']extend() — Aggiungi Più Elementi
extend() aggiunge tutti gli elementi di un altro iterabile (lista, tupla o string) alla fine:
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b)
print(a)
# [1, 2, 3, 4, 5, 6]L'operatore + fa la stessa cosa ma restituisce una nuova lista invece di modificare l'originale:
combined = [1, 2, 3] + [4, 5, 6]
print(combined)
# [1, 2, 3, 4, 5, 6]Rimozione di Elementi
remove() — Rimuovi per Valore
remove() elimina la prima occorrenza di un valore. Solleva ValueError se il valore non è nella lista:
pop() — Rimuovi per Indice
pop() rimuove e restituisce l'elemento a un dato indice (predefinito: ultimo elemento). È utile quando devi sia recuperare che rimuovere un elemento:
fruits = ['apple', 'banana', 'cherry']
last = fruits.pop()
print(last) # cherry
print(fruits) # ['apple', 'banana']
first = fruits.pop(0)
print(first) # apple
print(fruits) # ['banana']del — Elimina per Indice o Slice
L'istruzione del rimuove un elemento tramite indice o un intero slice:
clear() — Rimuovi Tutti gli Elementi
clear() svuota la lista senza eliminarla:
fruits = ['apple', 'banana', 'cherry']
fruits.clear()
print(fruits)
# []Metodi Utili delle Liste
Le liste Python dispongono di un set completo di metodi integrati. Consulta Metodi delle Liste Python per il riferimento completo.
len() — Lunghezza della Lista
sort() — Ordina in Place
sort() ordina la lista in ordine crescente per impostazione predefinita. Usa reverse=True per l'ordine decrescente:
Usa il parametro key per ordinare secondo un criterio personalizzato — per esempio, per lunghezza delle parole:
words = ['banana', 'apple', 'cherry', 'date']
words.sort(key=len)
print(words)
# ['date', 'apple', 'banana', 'cherry']sort() modifica la lista in place. Per ottenere una copia ordinata senza modificare l'originale, usa la funzione integrata sorted():
original = [3, 1, 2]
s = sorted(original)
print(original) # [3, 1, 2]
print(s) # [1, 2, 3]Vedi Ordinare le Liste per ulteriori pattern di ordinamento.
reverse() — Inverti in Place
count() — Conta le Occorrenze
count(value) restituisce quante volte un valore compare:
nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2))
# 3index() — Trova un Valore
index(value) restituisce l'indice della prima occorrenza. Solleva ValueError se non trovato:
nums = [1, 2, 3, 4]
print(nums.index(3))
# 2copy() — Copia Superficiale
copy() restituisce una nuova lista con gli stessi elementi di primo livello. Modificare la copia non influisce sull'originale:
original = [1, 2, 3]
copy = original.copy()
copy.append(4)
print(original) # [1, 2, 3]
print(copy) # [1, 2, 3, 4]Ordinamento vs. Inversione: Differenza Chiave
sort() e reverse() modificano entrambi la lista in place e restituiscono None. Un errore comune è scrivere my_list = my_list.sort(), che sostituisce la lista con None. Chiamali sempre come istruzioni:
fruits = ['banana', 'apple', 'cherry']
fruits.sort() # correct — modifies in place
# fruits = fruits.sort() # wrong — sets fruits to None
print(fruits)
# ['apple', 'banana', 'cherry']Liste Annidate
Una lista può contenere altre liste come elementi, formando una struttura 2D (o più profonda):
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
print(matrix[0]) # [1, 2, 3]
print(matrix[1][2]) # 6 — row 1, column 2Le liste annidate vengono comunemente utilizzate per rappresentare griglie, tabelle e matrici.
List Comprehension
Una list comprehension è un'espressione concisa su una riga per costruire una nuova lista trasformando o filtrando un iterabile esistente. La sintassi è:
[expression for item in iterable if condition]La parte if condition è opzionale.
Quadrati da 1 a 10:
Solo numeri pari:
evens = [x for x in range(1, 11) if x % 2 == 0]
print(evens)
# [2, 4, 6, 8, 10]Trasforma string:
fruits = ['apple', 'banana', 'cherry']
upper = [f.upper() for f in fruits]
print(upper)
# ['APPLE', 'BANANA', 'CHERRY']Le list comprehension sono generalmente più veloci di un ciclo for equivalente con append(). Vedi List Comprehension per pattern avanzati.
Decompressione delle Liste
Puoi assegnare gli elementi di una lista a variabili individuali in un solo passaggio:
a, b, c = ['x', 'y', 'z']
print(a, b, c)
# x y zL'operatore * (asterisco) cattura un numero qualsiasi di elementi rimanenti:
first, *rest = [1, 2, 3, 4, 5]
print(first) # 1
print(rest) # [2, 3, 4, 5]La decompressione solleva ValueError se il numero di variabili non corrisponde al numero di elementi (a meno che non si usi *).
Quando Usare una Lista
| Situazione | Raccomandazione |
|---|---|
| Collezione ordinata che cambia dimensione | Lista |
| Collezione fissa che non deve cambiare | Tupla |
Test di appartenenza rapido (in) | Set |
| Mappatura chiave-valore | Dizionario |
| Grandi array numerici | numpy.array (terze parti) |