Liste avanzate
Perché ti serve questo?
Section titled “Perché ti serve questo?”Sai già usare le liste di base. Ora impari le tecniche che rendono il codice Python più corto, più leggibile e più efficiente — strumenti che i programmatori Python usano ogni giorno.
List comprehension: creare liste in una riga
Section titled “List comprehension: creare liste in una riga”La list comprehension è un modo compatto per costruire una lista a partire da un’altra sequenza, tutto in una sola riga.
Il problema che risolve
Section titled “Il problema che risolve”# Metodo tradizionale: 4 righe per creare una lista di quadratiquadrati = []for x in range(1, 6): quadrati.append(x ** 2)print(quadrati) # [1, 4, 9, 16, 25]
# Con list comprehension: 1 sola riga, stesso risultatoquadrati = [x ** 2 for x in range(1, 6)]print(quadrati) # [1, 4, 9, 16, 25]Leggi la list comprehension come: “x al quadrato, per ogni x in range(1, 6)”.
Con un filtro (if)
Section titled “Con un filtro (if)”Puoi aggiungere una condizione per includere solo certi elementi:
# Solo i numeri pari tra 0 e 9pari = [x for x in range(10) if x % 2 == 0]print(pari) # [0, 2, 4, 6, 8]
# Solo le parole di più di 4 lettereparole = ["mela", "banana", "uva", "ciliegia", "kiwi"]lunghe = [p for p in parole if len(p) > 4]print(lunghe) # ['banana', 'ciliegia']Con if-else (trasformazione condizionale)
Section titled “Con if-else (trasformazione condizionale)”Puoi trasformare ogni elemento in modo diverso a seconda di una condizione:
# Classifica ogni numero come "pari" o "dispari"numeri = range(6)classificati = ["pari" if x % 2 == 0 else "dispari" for x in numeri]print(classificati) # ['pari', 'dispari', 'pari', 'dispari', 'pari', 'dispari']List comprehension annidate (per le matrici)
Section titled “List comprehension annidate (per le matrici)”Puoi usare una list comprehension dentro un’altra per lavorare con strutture a griglia (righe e colonne):
# Creare una matrice 3x3 (lista di liste)matrice = [[j for j in range(3)] for i in range(3)]print(matrice) # [[0, 1, 2], [0, 1, 2], [0, 1, 2]]
# "Appiattire" una matrice in una lista semplicematrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]piatta = [elem for riga in matrice for elem in riga]print(piatta) # [1, 2, 3, 4, 5, 6, 7, 8, 9]Ordinare con sorted() e una chiave personalizzata
Section titled “Ordinare con sorted() e una chiave personalizzata”Per default sorted() ordina in ordine alfabetico o numerico. Con il parametro key puoi scegliere tu in base a cosa ordinare.
studenti = [("Alice", 16), ("Carlo", 15), ("Bob", 17)]
# Ordina per età (il secondo elemento della coppia)per_eta = sorted(studenti, key=lambda s: s[1])print(per_eta) # [('Carlo', 15), ('Alice', 16), ('Bob', 17)]
# Ordina per nome (il primo elemento della coppia)per_nome = sorted(studenti, key=lambda s: s[0])print(per_nome) # [('Alice', 16), ('Bob', 17), ('Carlo', 15)]
# Ordine dal più grande al più piccolodecrescente = sorted(studenti, key=lambda s: s[1], reverse=True)print(decrescente) # [('Bob', 17), ('Alice', 16), ('Carlo', 15)]map() e filter(): applicare funzioni a liste
Section titled “map() e filter(): applicare funzioni a liste”numeri = [1, 2, 3, 4, 5]
# map(): applica una funzione a ogni elemento e restituisce i risultatidoppi = list(map(lambda x: x * 2, numeri))print(doppi) # [2, 4, 6, 8, 10]
# filter(): tieni solo gli elementi che soddisfano la condizionegrandi = list(filter(lambda x: x > 3, numeri))print(grandi) # [4, 5]Nota: spesso le list comprehension sono più leggibili di
mapefilter. Usa quella forma che trovi più chiara.
zip(): scorrere più liste insieme
Section titled “zip(): scorrere più liste insieme”zip() combina due o più liste in coppie (o triplette, ecc.), permettendoti di scorrerle tutte insieme.
nomi = ["Alice", "Bob", "Carlo"]voti = [8, 7, 9]citta = ["Roma", "Milano", "Napoli"]
# Scorrere due liste in parallelofor nome, voto in zip(nomi, voti): print(f"{nome}: {voto}")# → Alice: 8# → Bob: 7# → Carlo: 9
# Creare una lista di coppiecoppie = list(zip(nomi, voti, citta))print(coppie)# → [('Alice', 8, 'Roma'), ('Bob', 7, 'Milano'), ('Carlo', 9, 'Napoli')]Operazioni comuni sulle liste
Section titled “Operazioni comuni sulle liste”numeri = [3, 1, 4, 1, 5, 9, 2, 6]
print(sum(numeri)) # 31 — somma di tutti i valoriprint(max(numeri)) # 9 — il valore più grandeprint(min(numeri)) # 1 — il valore più piccoloprint(len(numeri)) # 8 — quanti elementi ci sono
# Calcolare la mediamedia = sum(numeri) / len(numeri)print(f"Media: {media:.2f}") # Media: 3.88
# Rimuovere i duplicati mantenendo l'ordine originaleunici = list(dict.fromkeys(numeri))print(unici) # [3, 1, 4, 5, 9, 2, 6]