Vai al contenuto

Le liste

In questa lezione impari a

  • creare una lista e accedere ai suoi elementi
  • aggiungere, togliere e modificare elementi
  • scorrere una lista con il ciclo for
  • formattare i messaggi con le f-string

Immagina di dover salvare i voti di tutta la classe: 25 variabili voto1, voto2… sarebbero ingestibili. Una lista raccoglie tanti valori in una sola variabile, in ordine.

Creare una lista

voti = [7, 8, 5, 9, 6]
nomi = ["Anna", "Luca", "Marta"]
vuota = []

Gli elementi stanno tra parentesi quadre, separati da virgole. Una lista può contenere qualunque tipo di dato, anche mescolato.

Accedere agli elementi

Ogni elemento ha un indice, cioè una posizione. Si comincia a contare da 0.

nomi = ["Anna", "Luca", "Marta"]
print(nomi[0])     # Anna
print(nomi[2])     # Marta
print(nomi[-1])    # Marta: gli indici negativi contano dalla fine
print(len(nomi))   # 3: quanti elementi ci sono

Attenzione: con 3 elementi gli indici vanno da 0 a 2. Scrivere nomi[3] provoca l'errore IndexError.

Fette di lista (slicing)

numeri = [10, 20, 30, 40, 50]
print(numeri[1:4])   # [20, 30, 40]: dall'indice 1 al 3
print(numeri[:2])    # [10, 20]: i primi due
print(numeri[-2:])   # [40, 50]: gli ultimi due

Modificare una lista

Le liste sono mutabili: puoi cambiarle dopo averle create.

Operazione Cosa fa
lista[i] = valore sostituisce l'elemento in posizione i
lista.append(x) aggiunge x in fondo
lista.insert(i, x) inserisce x in posizione i
lista.remove(x) toglie il primo elemento uguale a x
lista.pop() toglie e restituisce l'ultimo elemento
lista.sort() ordina la lista
x in lista True se x è nella lista
spesa = ["latte", "pane"]
spesa.append("uova")
spesa.insert(0, "caffè")
spesa.remove("pane")
print(spesa)                 # ['caffè', 'latte', 'uova']
print("latte" in spesa)      # True

Scorrere una lista

Il ciclo for prende un elemento alla volta:

voti = [7, 8, 5, 9, 6]
for voto in voti:
    print("Voto:", voto)

Python ha funzioni già pronte per i calcoli più comuni:

voti = [7, 8, 5, 9, 6]
print(sum(voti))               # 35
print(max(voti), min(voti))    # 9 5
print(sum(voti) / len(voti))   # 7.0: la media

Le f-string

Da questa lezione useremo un modo più comodo per comporre i messaggi: la f-string. Si mette una f prima delle virgolette e si scrivono le variabili tra graffe.

nome = "Anna"
media = 7.456
print(f"{nome} ha la media del {media:.1f}")   # Anna ha la media del 7.5

:.1f significa "mostra una cifra decimale".

Esercizi

Esercizio 1 – I voti. Chiedi all'utente 5 voti, salvali in una lista e stampa il voto più alto, il più basso e la media.

Mostra la soluzione
voti = []
for i in range(5):
    voto = float(input(f"Voto {i + 1}: "))
    voti.append(voto)

print(f"Voto più alto: {max(voti)}")
print(f"Voto più basso: {min(voti)}")
print(f"Media: {sum(voti) / len(voti):.2f}")

Esercizio 2 – Solo i pari. Data la lista numeri = [3, 8, 12, 5, 7, 20, 1], crea una nuova lista con i soli numeri pari.

Mostra la soluzione
numeri = [3, 8, 12, 5, 7, 20, 1]
pari = []
for n in numeri:
    if n % 2 == 0:
        pari.append(n)
print(pari)   # [8, 12, 20]

Esiste anche una forma compatta, la list comprehension: pari = [n for n in numeri if n % 2 == 0].

Esercizio 3 – La lista della spesa. Crea un programma con un menu: 1 aggiungi un prodotto, 2 togli un prodotto, 3 mostra la lista, 0 esci.

Mostra la soluzione
spesa = []
scelta = ""
while scelta != "0":
    print("\n1 Aggiungi  2 Togli  3 Mostra  0 Esci")
    scelta = input("Scelta: ")
    if scelta == "1":
        spesa.append(input("Prodotto: "))
    elif scelta == "2":
        prodotto = input("Prodotto da togliere: ")
        if prodotto in spesa:
            spesa.remove(prodotto)
        else:
            print("Non è nella lista")
    elif scelta == "3":
        for i, prodotto in enumerate(spesa, start=1):
            print(f"{i}. {prodotto}")

enumerate() restituisce insieme la posizione e l'elemento: comodo per numerare.

Da fare da solo

  1. Chiedi 10 numeri e stampa quanti sono maggiori della media.
  2. Data una lista di nomi, stampali in ordine alfabetico e poi al contrario (cerca come si usa reverse=True con sort()).
  3. Elimina i doppioni da una lista senza usare set().