← Back to course

Liste: salvare molti valori

Liste: salvare molti valori

Bentornato.

Nella lezione precedente hai imparato i cicli.

I tuoi programmi hanno imparato a ripetere lavoro con:

for
while

Molto bene.

Ora Python può ripetere operazioni automaticamente.

Può contare.

Può chiedere di nuovo.

Può calcolare totali.

Può mostrare menu.

Bellissimo.

Ma ora abbiamo un altro problema.

E se dobbiamo salvare molti valori?

Per esempio:

Una lista di prodotti.
Una lista di utenti.
Una lista di punteggi.
Una lista di città.
Una lista di task.
Una lista di password che non dovresti scrivere in chiaro.

Senza liste, potresti scrivere:

product1 = "Keyboard"
product2 = "Mouse"
product3 = "Notebook"

Funziona.

Ma diventa brutto molto velocemente.

E se hai 100 prodotti?

Scriverai davvero:

product100 = "Something"

Per favore no.

Python ha un modo migliore.

Le liste.

Le liste permettono di salvare molti valori in una sola variabile.

Molto utile.

Molto comune.

Molto Python.

Cosa imparerai

In questa lezione imparerai:

Alla fine di questa lezione i tuoi programmi potranno lavorare con collezioni di dati.

Questo è un passo molto grande.

Perché i programmi reali quasi mai lavorano con un solo valore.

Lavorano con molti valori.

Molti utenti.

Molti prodotti.

Molti task.

Molti problemi.

Molto realistico.

Molto programmazione.

Cos’è una lista?

Una lista è una collezione di valori.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

Qui:

products

è una sola variabile.

Ma contiene tre valori:

Keyboard
Mouse
Notebook

Una lista usa le parentesi quadre:

[]

Gli elementi dentro la lista sono separati da virgole:

["Keyboard", "Mouse", "Notebook"]

Questo è molto meglio di scrivere:

product1 = "Keyboard"
product2 = "Mouse"
product3 = "Notebook"

Le liste tengono insieme valori collegati.

Come una piccola scatola.

Ma digitale.

E con meno probabilità di contenere cavi casuali.

La tua prima lista

Crea un file:

lists.py

Scrivi:

products = ["Keyboard", "Mouse", "Notebook"]

print(products)

Eseguilo:

python lists.py

oppure:

python3 lists.py

Output:

['Keyboard', 'Mouse', 'Notebook']

Python stampa tutta la lista.

Nota che Python mostra parentesi quadre e virgolette.

È normale.

Ti sta mostrando la struttura della lista.

La lista non è solo testo.

È una collezione.

Un piccolo contenitore di valori.

Molto organizzato.

Sospettosamente organizzato.

Le liste possono salvare tipi diversi

Una lista può salvare diversi tipi di valori.

Esempio:

mixed_list = ["Anna", 25, 19.99, True]

print(mixed_list)

Output:

['Anna', 25, 19.99, True]

Funziona.

Ma fai attenzione.

Solo perché Python permette qualcosa, non significa che sia sempre una buona idea.

Spesso le liste sono più chiare quando salvano cose simili.

Buono:

prices = [10.99, 25.50, 5.00]
names = ["Anna", "Marco", "Sofia"]
scores = [90, 85, 72]

Meno chiaro:

random_things = ["Anna", 42, True, "Pizza", 3.14]

Python permette libertà.

La libertà è bella.

La libertà può anche creare caos con parentesi quadre.

Usala responsabilmente.

Accedere agli elementi tramite indice

Ogni elemento in una lista ha una posizione.

Questa posizione si chiama indice.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

print(products[0])
print(products[1])
print(products[2])

Output:

Keyboard
Mouse
Notebook

Importante:

Il primo elemento ha indice 0.

Non 1.

Python inizia a contare da zero.

Di nuovo.

Python e lo zero sono ancora grandi amici.

Quindi:

products[0] -> Keyboard
products[1] -> Mouse
products[2] -> Notebook

Questo è molto importante.

Gli indici sono il modo per accedere a elementi specifici della lista.

Gli indici iniziano da 0

Questa è una delle sorprese più comuni per i principianti.

Potresti pensare che:

products[1]

significhi il primo elemento.

Ma no.

In Python:

products[0]

significa il primo elemento.

Esempio:

cities = ["Rome", "Milan", "Naples"]

print(cities[0])

Output:

Rome

Se vuoi il secondo elemento:

print(cities[1])

Output:

Milan

All’inizio sembra strano.

Poi diventa normale.

Poi inizi a contare da zero nella tua testa.

A quel punto la programmazione ti ha cambiato.

Non necessariamente in peggio.

Probabilmente.

Ottenere l’ultimo elemento

Puoi usare indici negativi.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

print(products[-1])

Output:

Notebook

-1 significa:

ultimo elemento

Altri esempi:

print(products[-2])
print(products[-3])

Output:

Mouse
Keyboard

Gli indici negativi contano dalla fine.

Molto utile.

Molto Python.

Molto “voglio l’ultima cosa senza contare tutto”.

A volte Python sa essere gentile.

Aggiornare un elemento della lista

Le liste possono essere modificate.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

products[1] = "Gaming Mouse"

print(products)

Output:

['Keyboard', 'Gaming Mouse', 'Notebook']

Abbiamo modificato l’elemento all’indice 1.

Prima:

Mouse

Dopo:

Gaming Mouse

Ricorda:

l’indice 1 è il secondo elemento

Python fa esattamente quello che chiedi.

Anche se dimentichi che gli indici iniziano da zero.

Python non ti protegge dalla tua sicurezza eccessiva.

Molto educativo.

Aggiungere elementi con append()

Puoi aggiungere un elemento alla fine della lista con append().

Esempio:

products = ["Keyboard", "Mouse"]

products.append("Notebook")

print(products)

Output:

['Keyboard', 'Mouse', 'Notebook']

append() aggiunge un elemento alla fine.

È molto comune.

Esempio con input dell’utente:

products = []

product = input("Product name: ")
products.append(product)

print(products)

Se l’utente scrive:

Keyboard

Output:

['Keyboard']

Una lista vuota inizia così:

products = []

Poi puoi aggiungere elementi dopo.

Molto utile.

Molto flessibile.

Molto “costruiamo la lista mentre andiamo avanti”.

Aggiungere più elementi

Puoi chiamare append() più volte.

Esempio:

products = []

products.append("Keyboard")
products.append("Mouse")
products.append("Notebook")

print(products)

Output:

['Keyboard', 'Mouse', 'Notebook']

Questo è utile quando i valori arrivano uno alla volta.

Per esempio:

input dell’utente
dati da un file
dati da un database
dati da un’API

Le liste sono ovunque.

Sono come borse per i dati.

Ma meno caotiche.

A meno che tu non ci metta dati caotici dentro.

Allora è colpa tua.

Probabilmente.

Rimuovere elementi con remove()

Puoi rimuovere un elemento per valore con remove().

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

products.remove("Mouse")

print(products)

Output:

['Keyboard', 'Notebook']

remove() rimuove il primo elemento corrispondente.

Importante:

products.remove("Mouse")

significa:

Trova "Mouse" e rimuovilo.

Non significa:

Rimuovi l’elemento all’indice Mouse.

Perché sarebbe assurdo.

Python accetta molte cose.

Ma non quella.

remove() ha bisogno di un elemento esistente

Se provi a rimuovere un elemento che non esiste, Python dà errore.

Esempio:

products = ["Keyboard", "Mouse"]

products.remove("Notebook")

Errore:

ValueError

Perché?

Perché "Notebook" non è nella lista.

Più avanti impareremo a gestire meglio gli errori.

Per ora puoi controllare prima:

products = ["Keyboard", "Mouse"]

if "Notebook" in products:
    products.remove("Notebook")
else:
    print("Notebook is not in the list.")

Questo è più sicuro.

Il programma controlla prima di rimuovere.

Molto responsabile.

Molto adulto.

A differenza di un po’ di codice scritto alle 2 di notte.

Controllare se un elemento esiste

Usa in per controllare se un elemento esiste in una lista.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

if "Mouse" in products:
    print("Mouse is available.")
else:
    print("Mouse is not available.")

Output:

Mouse is available.

Puoi anche controllare il contrario con not in:

if "Monitor" not in products:
    print("Monitor is missing.")

Output:

Monitor is missing.

Questo è molto utile.

Userai spesso in.

Le liste e in sono buoni amici.

Come Python e lo zero.

Ma meno sospetti.

Lunghezza della lista con len()

len() ti dice quanti elementi ci sono in una lista.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

print(len(products))

Output:

3

Questo significa che la lista ha 3 elementi.

Puoi usarlo nei messaggi:

products = ["Keyboard", "Mouse", "Notebook"]

print(f"We have {len(products)} products.")

Output:

We have 3 products.

len() è molto utile.

Funziona con le liste.

Funziona anche con le stringhe.

Esempio:

word = "Python"

print(len(word))

Output:

6

Python ama contare le cose.

Molto utile.

Energia da contabile.

Scorrere una lista con un ciclo

Liste e cicli lavorano benissimo insieme.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

for product in products:
    print(product)

Output:

Keyboard
Mouse
Notebook

Questo significa:

Per ogni product nella lista products, stampa product.

Questo è uno degli schemi più importanti in Python.

Una lista salva molti valori.

Un ciclo li processa uno alla volta.

Molto potente.

Molto comune.

Molto “ora stiamo programmando davvero”.

Output migliore con le liste

Puoi combinare cicli e f-string.

Esempio:

products = ["Keyboard", "Mouse", "Notebook"]

for product in products:
    print(f"Product: {product}")

Output:

Product: Keyboard
Product: Mouse
Product: Notebook

Così è più pulito.

Puoi anche aggiungere numerazione:

products = ["Keyboard", "Mouse", "Notebook"]

number = 1

for product in products:
    print(f"{number}. {product}")
    number += 1

Output:

1. Keyboard
2. Mouse
3. Notebook

Funziona.

Ma Python ha uno strumento ancora più bello per numerare.

Lo impareremo presto.

Non adesso.

Un drago alla volta.

Scorrere prezzi

Le liste possono salvare anche numeri.

Esempio:

prices = [10.99, 25.50, 5.00]

for price in prices:
    print(f"Price: {price:.2f}")

Output:

Price: 10.99
Price: 25.50
Price: 5.00

Puoi calcolare un totale:

prices = [10.99, 25.50, 5.00]

total = 0

for price in prices:
    total += price

print(f"Total: {total:.2f}")

Output:

Total: 41.49

Questo è uno schema molto comune:

lista di numeri
ciclo sui numeri
calcolo del totale

Semplice.

Utile.

Molto reale.

Molte fatture iniziano così.

Poi arrivano le tasse.

E la musica diventa più scura.

Trovare il numero più grande

Puoi usare un ciclo per trovare il numero più grande.

Esempio:

scores = [75, 90, 62, 88]

highest_score = scores[0]

for score in scores:
    if score > highest_score:
        highest_score = score

print(f"Highest score: {highest_score}")

Output:

Highest score: 90

Cosa succede?

Parti assumendo che il primo punteggio sia il più alto.
Controlla ogni score.
Se uno score è più grande, aggiorna highest_score.
Stampa il risultato finale.

Questo è uno schema classico di programmazione.

Assumi un valore iniziale.

Ciclo.

Confronta.

Aggiorna.

Molto utile.

Molto algoritmico.

Sembra elegante.

Ma è solo controllo attento.

Come cercare la patata più grande in un sacco.

L’informatica è glamour.

Liste vuote

Una lista vuota non contiene elementi.

Esempio:

products = []

print(products)
print(len(products))

Output:

[]
0

Le liste vuote sono utili quando vuoi aggiungere elementi dopo.

Esempio:

products = []

products.append("Keyboard")
products.append("Mouse")

print(products)

Output:

['Keyboard', 'Mouse']

Molti programmi iniziano con una lista vuota.

Poi la riempiono.

È molto normale.

Una lista vuota non è inutile.

Sta solo aspettando dati.

Come un cestino.

Un cestino molto paziente.

Costruire una lista da input utente

Crea un file:

product_list.py

Scrivi:

products = []

product_count = int(input("How many products? "))

for number in range(1, product_count + 1):
    product = input(f"Product {number}: ")
    products.append(product)

print("Your products:")

for product in products:
    print(f"- {product}")

Esempio di interazione:

How many products? 3
Product 1: Keyboard
Product 2: Mouse
Product 3: Notebook

Output:

Your products:
- Keyboard
- Mouse
- Notebook

Questo è un vero programma che costruisce una lista.

L’utente dà i valori.

Python li salva in una lista.

Poi Python scorre la lista e li stampa.

Molto utile.

Molto adatto ai principianti.

Molto vicino alle applicazioni reali.

Liste con condizioni

Puoi usare condizioni mentre scorri una lista.

Esempio:

prices = [10.99, 120.00, 5.50, 250.00]

for price in prices:
    if price >= 100:
        print(f"Expensive item: {price:.2f}")

Output:

Expensive item: 120.00
Expensive item: 250.00

Questo significa:

Passa attraverso tutti i prezzi.
Stampa solo i prezzi che sono 100 o più.

Questo è filtrare.

Filtrare significa:

Mostra solo gli elementi che rispettano una condizione.

Molto comune.

Molto utile.

Molto simile ai database.

PostgreSQL sta guardando orgoglioso dall’angolo.

Creare una nuova lista filtrata

Puoi creare una nuova lista con elementi selezionati.

Esempio:

prices = [10.99, 120.00, 5.50, 250.00]

expensive_prices = []

for price in prices:
    if price >= 100:
        expensive_prices.append(price)

print(expensive_prices)

Output:

[120.0, 250.0]

Cosa succede?

Inizia con una lista vuota.
Scorri tutti i prezzi.
Se il prezzo è expensive, aggiungilo a expensive_prices.
Stampa la nuova lista.

Questo è un altro schema molto comune.

Ciclo.

Controllo.

Append.

Congratulazioni.

Ora stai facendo vero data processing.

Piccoli dati.

Ma veri.

Errore comune: index out of range

Questo è sbagliato:

products = ["Keyboard", "Mouse", "Notebook"]

print(products[3])

Python dà errore:

IndexError

Perché?

Perché la lista ha 3 elementi.

I loro indici sono:

0
1
2

Non esiste indice 3.

Ricorda:

products[0]  # primo elemento
products[1]  # secondo elemento
products[2]  # terzo elemento

L’ultimo indice è:

lunghezza - 1

Se una lista ha 3 elementi, l’ultimo indice è 2.

Python non è crudele.

Sta solo contando da zero di nuovo.

Classico Python.

Errore comune: dimenticare le virgolette

Sbagliato:

products = [Keyboard, Mouse, Notebook]

Python pensa che Keyboard, Mouse e Notebook siano nomi di variabili.

Ma non sono definite.

Corretto:

products = ["Keyboard", "Mouse", "Notebook"]

Le stringhe hanno bisogno delle virgolette.

Le variabili no.

Questa regola ritorna ancora e ancora.

Come un bug che pensavi di aver risolto.

Ma più amichevole.

Errore comune: usare append() male

Sbagliato:

products = ["Keyboard"]

products.append("Mouse", "Notebook")

Questo dà errore.

Perché?

Perché append() aggiunge un elemento alla volta.

Corretto:

products = ["Keyboard"]

products.append("Mouse")
products.append("Notebook")

Output:

['Keyboard', 'Mouse', 'Notebook']

Per ora ricorda:

append() aggiunge un elemento.

Più avanti imparerai altri modi per aggiungere più elementi.

Python ha altri strumenti.

Certo che li ha.

La cassetta degli attrezzi non finisce mai.

Errore comune: rimuovere elementi mancanti

Sbagliato:

products = ["Keyboard", "Mouse"]

products.remove("Notebook")

Questo causa:

ValueError

Perché "Notebook" non è nella lista.

Più sicuro:

products = ["Keyboard", "Mouse"]

if "Notebook" in products:
    products.remove("Notebook")
else:
    print("Notebook was not found.")

Fai sempre attenzione quando rimuovi elementi.

Le liste non rimuovono magicamente cose che non ci sono.

Sarebbe un problema filosofico.

E Python non è dell’umore.

Errore comune: confondere indice e valore

Guarda questa lista:

products = ["Keyboard", "Mouse", "Notebook"]

Indici:

0, 1, 2

Valori:

Keyboard, Mouse, Notebook

Questo accede tramite indice:

print(products[1])

Output:

Mouse

Questo rimuove tramite valore:

products.remove("Mouse")

Differenza importante:

indice = posizione
valore = elemento reale

Non confonderli.

L’indice è dove si trova la cosa.

Il valore è la cosa.

Molto semplice.

Molto facile da dimenticare.

Molto normale per principianti.

Mini programma: lista della spesa

Crea un file:

shopping_list.py

Scrivi:

shopping_list = []

while True:
    item = input("Add item or type q to quit: ")

    if item == "q":
        break

    shopping_list.append(item)

print("Your shopping list:")

for item in shopping_list:
    print(f"- {item}")

Esempio:

Add item or type q to quit: Bread
Add item or type q to quit: Milk
Add item or type q to quit: Eggs
Add item or type q to quit: q

Output:

Your shopping list:
- Bread
- Milk
- Eggs

Questo programma usa:

Molti concetti insieme.

Ottima pratica.

Molto reale.

Molto utile se poi ti ricordi davvero di comprare le uova.

Mini programma: media dei punteggi

Crea un file:

average_score.py

Scrivi:

scores = []

score_count = int(input("How many scores? "))

for number in range(1, score_count + 1):
    score = float(input(f"Score {number}: "))
    scores.append(score)

total = 0

for score in scores:
    total += score

average = total / len(scores)

print(f"Average score: {average:.2f}")

Esempio:

How many scores? 3
Score 1: 80
Score 2: 90
Score 3: 70

Output:

Average score: 80.00

Questo programma usa:

Questo è un programma serio per principianti.

Non enorme.

Ma serio.

La zuppa Python diventa di nuovo più ricca.

Ancora senza gusto USB.

Bene.

Mini programma: prezzi dei prodotti

Crea un file:

product_prices.py

Scrivi:

prices = []

product_count = int(input("How many products? "))

for number in range(1, product_count + 1):
    price = float(input(f"Price for product {number}: "))
    prices.append(price)

total = 0

for price in prices:
    total += price

print(f"Total: {total:.2f}")

if total >= 100:
    print("Big order.")
else:
    print("Small order.")

Esempio:

How many products? 3
Price for product 1: 20
Price for product 2: 30
Price for product 3: 60

Output:

Total: 110.00
Big order.

Ora combiniamo:

liste
cicli
condizioni
numeri
input
output formattato

Così si costruiscono programmi reali.

Concetto dopo concetto.

Riga dopo riga.

Piccolo mattone.

Piccolo mattone.

Alla fine appare la casa.

Speriamo non infestata da errori di indentazione.

Pratica

Crea un file:

practice_lists.py

Scrivi un programma che:

Soluzione esempio:

names = []

name_count = int(input("How many names? "))

for number in range(1, name_count + 1):
    name = input(f"Name {number}: ")
    names.append(name)

print("Names:")

for name in names:
    print(f"- {name}")

print(f"Total names: {len(names)}")

if "Anna" in names:
    print("Anna is in the list.")
else:
    print("Anna is not in the list.")

Provalo.

Cambia nomi.

Prova ad aggiungere Anna.

Prova a non aggiungere Anna.

Il programma dovrebbe reagire diversamente.

Liste più condizioni.

Molto utile.

Molto reale.

Mini sfida

Crea un file:

task_manager.py

Il tuo programma deve:

Menu:

1. Add task
2. Show tasks
q. Quit

Soluzione esempio:

tasks = []

while True:
    print("----- Task Manager -----")
    print("1. Add task")
    print("2. Show tasks")
    print("q. Quit")

    choice = input("Choose an option: ").lower()

    if choice == "1":
        task = input("Task: ")
        tasks.append(task)
        print("Task added.")
    elif choice == "2":
        print("Tasks:")

        if len(tasks) == 0:
            print("No tasks yet.")
        else:
            for task in tasks:
                print(f"- {task}")
    elif choice == "q":
        print("Goodbye.")
        break
    else:
        print("Unknown option.")

Questa è una vera mini applicazione.

Usa:

Piccolo progetto.

Grande progresso.

Così iniziano gli strumenti da terminale.

Prima di diventare web app.

Prima di diventare dashboard.

Prima che qualcuno chieda:

Can we add login?

E l’avventura diventa più lunga.

Sfida extra: rimuovere task

Migliora task_manager.py.

Aggiungi un’altra opzione al menu:

3. Remove task

Poi permetti all’utente di scrivere il nome del task e rimuoverlo.

Idea esempio:

elif choice == "3":
    task = input("Task to remove: ")

    if task in tasks:
        tasks.remove(task)
        print("Task removed.")
    else:
        print("Task not found.")

Questo aggiunge:

Ora il tuo task manager può aggiungere, mostrare e rimuovere task.

Ancora piccolo.

Ma molto utile.

Una piccola app di produttività.

Cerca di non passare tre ore a migliorarla.

Oppure sì.

Anche così nascono i programmatori.

Checklist per principianti

Quando il tuo programma con liste non funziona, controlla:

Ho usato parentesi quadre per la lista?
Ho separato gli elementi con virgole?
Ho messo le stringhe tra virgolette?
Mi sono ricordato che gli indici iniziano da 0?
Sto provando ad accedere a un indice che non esiste?
Ho usato append() con un solo elemento?
Ho controllato se un elemento esiste prima di remove()?
Ho indentato correttamente il corpo del ciclo?
Ho usato len() quando mi serviva il numero di elementi?
Ho confuso indice e valore?

Le liste sono semplici all’inizio.

Poi diventano molto potenti.

La maggior parte degli errori dei principianti con le liste viene dagli indici.

Gli indici iniziano da zero.

Il primo elemento è indice 0.

L’ultimo elemento spesso è:

list_name[-1]

Ricordalo.

Il tuo tempo futuro di debugging ti ringrazierà.

Probabilmente in silenzio.

Riassunto

Oggi hai imparato:

Questo è un passo enorme.

Ora i tuoi programmi possono salvare molti valori.

Possono processare collezioni di dati.

Possono costruire liste della spesa.

Possono calcolare totali.

Possono gestire task.

Possono lavorare con molti input.

Questo è molto più vicino alla programmazione reale.

Un valore è bello.

Molti valori sono la realtà.

Prossima lezione

Nella prossima lezione impareremo i dizionari.

I dizionari ti permettono di salvare dati usando chiavi e valori.

Invece di salvare solo:

["Anna", 25, "Rome"]

potrai scrivere:

user = {
    "name": "Anna",
    "age": 25,
    "city": "Rome"
}

Questo è molto importante.

Le liste sono ottime per molti valori.

I dizionari sono ottimi per dati strutturati.

E i dati strutturati sono ovunque.

Utenti.

Prodotti.

Ordini.

Profili.

API.

Molto utile.

Molto Python.