W3docs

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:

python— editable, runs on the server

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:

python— editable, runs on the server

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:

python— editable, runs on the server

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 copy

Lo 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:

python— editable, runs on the server

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:

python— editable, runs on the server

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:

python— editable, runs on the server

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:

python— editable, runs on the server

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

python— editable, runs on the server

sort() — Ordina in Place

sort() ordina la lista in ordine crescente per impostazione predefinita. Usa reverse=True per l'ordine decrescente:

python— editable, runs on the server

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

python— editable, runs on the server

count() — Conta le Occorrenze

count(value) restituisce quante volte un valore compare:

nums = [1, 2, 2, 3, 2, 4]
print(nums.count(2))
# 3

index() — 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))
# 2

copy() — 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 2

Le 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:

python— editable, runs on the server

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 z

L'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

SituazioneRaccomandazione
Collezione ordinata che cambia dimensioneLista
Collezione fissa che non deve cambiareTupla
Test di appartenenza rapido (in)Set
Mappatura chiave-valoreDizionario
Grandi array numericinumpy.array (terze parti)

Pratica

Pratica
Which of the following statements about Python lists are correct?
Which of the following statements about Python lists are correct?
Was this page helpful?