═══════════════════════════════════════════════════════════════════════════
📋 PROMEMORIA: LISTE ANNIDATE IN PYTHON
═══════════════════════════════════════════════════════════════════════════
─────────────────────────────────────────────────────────────────────────────
📌 COSA SONO LE LISTE ANNIDATE
─────────────────────────────────────────────────────────────────────────────
Le liste annidate sono liste che contengono altre liste come elementi.
Permettono di organizzare dati complessi e correlati in strutture ordinate.
Utilità: ideali quando ogni elemento ha attributi multipli
Esempio: prodotto con [nome, prezzo, quantità, tipo]
─────────────────────────────────────────────────────────────────────────────
🔍 INDICIZZAZIONE MULTIPLA
─────────────────────────────────────────────────────────────────────────────
Per accedere agli elementi di liste annidate si usa l'indicizzazione multipla:
Sintassi: lista[indice_esterno][indice_interno]
↑ ↑
seleziona sottolista seleziona elemento dentro la sottolista
Esempio pratico:
grocery_list = [
["Bread", 4.80, 3, "Gluten Free"],
["Milk", 5.99, 2, "2% Milk"],
["Apple", 1.27, 12, "Fuji"]
]
grocery_list[1] → ["Milk", 5.99, 2, "2% Milk"]
grocery_list[1][0] → "Milk" (nome)
grocery_list[1][1] → 5.99 (prezzo)
grocery_list[1][2] → 2 (quantità)
grocery_list[1][3] → "2% Milk" (tipo)
─────────────────────────────────────────────────────────────────────────────
🧪 ESEMPIO COMPLETO: LISTA DELLA SPESA
─────────────────────────────────────────────────────────────────────────────
Passo 1: Creare le sottoliste per ogni prodotto
Formato: [nome, prezzo, quantità, tipo]
bread = ["Bread", 4.80, 3, "Gluten Free"]
milk = ["Milk", 5.99, 2, "2% Milk"]
apple = ["Apple", 1.27, 12, "Fuji"]
Passo 2: Creare la lista principale contenente tutte le sottoliste
grocery_list = [bread, apple, milk]
print("Grocery List:", grocery_list)
Passo 3: Accedere ai dettagli di un articolo specifico
Esempio: accedere ai dettagli del "Milk" (posizione 2)
print("Item:", grocery_list[2][0]) # → "Milk"
print("Price:", grocery_list[2][1]) # → 5.99
print("Quantity:", grocery_list[2][2]) # → 2
print("Type:", grocery_list[2][3]) # → "2% Milk"
Passo 4: Aggiungere un nuovo articolo
onion = ["Onions", 1.30, 10, "Yellow"]
grocery_list.append(onion)
Ora la lista contiene: [bread, apple, milk, onion]
Passo 5: Rimuovere un articolo
grocery_list.remove(bread)
Ora la lista contiene: [apple, milk, onion]
Passo 6: Ordinare alfabeticamente (ordina per il primo elemento di ogni sottolista)
grocery_list.sort()
print("Updated Grocery List:", grocery_list)
Output: [["Apple", 1.27, 12, "Fuji"], ["Milk", 5.99, 2, "2% Milk"], ["Onions", 1.30, 10, "Yellow"]]
─────────────────────────────────────────────────────────────────────────────
💡 OPERAZIONI COMUNI CON LISTE ANNIDATE
─────────────────────────────────────────────────────────────────────────────
1. Verificare se un elemento è già presente prima di aggiungerlo
vegetables = ["tomatoes", "potatoes", "onions"]
if "carrots" not in vegetables:
vegetables.append("carrots")
else:
print("Carrots are already in the list.")
2. Rimuovere elementi
vegetables.remove("onions")
3. Aggiungere con controllo duplicati
if "cucumbers" not in vegetables:
vegetables.append("cucumbers")
else:
print("Cucumbers are already in the list.")
4. Ordinare alfabeticamente
vegetables.sort()
5. Stampare risultato finale
print(f"Updated Vegetable Inventory: {vegetables}")
─────────────────────────────────────────────────────────────────────────────
🎯 ESERCIZIO COMPLETO: GESTIONE INVENTARIO VERDURE
─────────────────────────────────────────────────────────────────────────────
Requisiti:
1. Creare lista iniziale
2. Rimuovere "onions"
3. Aggiungere "carrots" (con controllo duplicati)
4. Aggiungere "cucumbers" (con controllo duplicati)
5. Ordinare alfabeticamente
6. Stampare messaggi appropriati
7. Stampare lista finale
Soluzione:
vegetables = ["tomatoes", "potatoes", "onions"]
Rimuovere onions
vegetables.remove("onions")
Aggiungere carrots con controllo
if "carrots" not in vegetables:
vegetables.append("carrots")
else:
print("Carrots are already in the list.")
Aggiungere cucumbers con controllo
if "cucumbers" not in vegetables:
vegetables.append("cucumbers")
else:
print("Cucumbers are already in the list.")
Ordinare
vegetables.sort()
Stampare risultato
print(f"Updated Vegetable Inventory: {vegetables}")
Output atteso: Updated Vegetable Inventory: ['carrots', 'cucumbers', 'potatoes', 'tomatoes']
─────────────────────────────────────────────────────────────────────────────
💡 NOTE IMPORTANTI
─────────────────────────────────────────────────────────────────────────────
• L'operatore 'in' verifica la presenza di un elemento nella lista
• .sort() ordina le liste annidate in base al PRIMO elemento di ogni sottolista
• Per liste annidate numeriche, l'ordinamento sarà per il primo valore numerico
• L'indicizzazione multipla può avere più livelli: lista[0][1][2] ecc.
• Usare 'not in' per verificare l'ASSENZA di un elemento
─────────────────────────────────────────────────────────────────────────────
✅ CONFRONTO: LISTE SEMPLICI VS LISTE ANNIDATE
─────────────────────────────────────────────────────────────────────────────
Liste semplici: un valore per elemento
fruits = ["apple", "banana", "cherry"]
Liste annidate: multipli valori per elemento
products = [
["apple", 1.27, 12],
["banana", 0.59, 6],
["cherry", 3.99, 20]
]
Accesso:
Liste semplici: fruits[0] → "apple"
Liste annidate: products[0][0] → "apple", products[0][1] → 1.27
═══════════════════════════════════════════════════════════════════════════
Fine del promemoria
═══════════════════════════════════════════════════════════════════════════