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'erroreIndexError.
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
- Chiedi 10 numeri e stampa quanti sono maggiori della media.
- Data una lista di nomi, stampali in ordine alfabetico e poi al contrario (cerca come si usa
reverse=Trueconsort()). - Elimina i doppioni da una lista senza usare
set().