1 / 1
Indice della lezione

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.

Sono utili quando ogni elemento ha attributi multipli, ad esempio un prodotto rappresentato da [nome, prezzo, quantità, tipo].

Indicizzazione multipla

Per accedere agli elementi di liste annidate si usa la sintassi:

lista[indice_esterno][indice_interno]

  • Il primo indice seleziona la sottolista.
  • Il secondo indice seleziona un elemento dentro la sottolista.
grocery_list = [
    ["Bread", 4.80, 3, "Gluten Free"],
    ["Milk", 5.99, 2, "2% Milk"],
    ["Apple", 1.27, 12, "Fuji"]
]

# Esempi di accesso
# 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
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
grocery_list = [bread, apple, milk]
print("Grocery List:", grocery_list)

# Passo 3: accedere ai dettagli del latte (posizione 2)
print("Item:", grocery_list[2][0])
print("Price:", grocery_list[2][1])
print("Quantity:", grocery_list[2][2])
print("Type:", grocery_list[2][3])

# Passo 4: aggiungere un nuovo articolo
onion = ["Onions", 1.30, 10, "Yellow"]
grocery_list.append(onion)

# Passo 5: rimuovere un articolo
grocery_list.remove(bread)

# Passo 6: ordinare alfabeticamente per il primo elemento di ogni sottolista
grocery_list.sort()
print("Updated Grocery List:", grocery_list)

Operazioni comuni con liste annidate

Verificare la presenza prima di aggiungere

vegetables = ["tomatoes", "potatoes", "onions"]

if "carrots" not in vegetables:
    vegetables.append("carrots")
else:
    print("Carrots are already in the list.")

Rimuovere elementi

vegetables.remove("onions")

Aggiungere con controllo dei duplicati

if "cucumbers" not in vegetables:
    vegetables.append("cucumbers")
else:
    print("Cucumbers are already in the list.")

Ordinare e stampare il risultato

vegetables.sort()
print(f"Updated Vegetable Inventory: {vegetables}")

Esercizio completo: gestione inventario verdure

Requisiti:

  1. Creare la lista iniziale.
  2. Rimuovere "onions".
  3. Aggiungere "carrots" con controllo dei duplicati.
  4. Aggiungere "cucumbers" con controllo dei duplicati.
  5. Ordinare alfabeticamente.
  6. Stampare messaggi appropriati.
  7. Stampare la lista finale.

Soluzione:

vegetables = ["tomatoes", "potatoes", "onions"]

vegetables.remove("onions")

if "carrots" not in vegetables:
    vegetables.append("carrots")
else:
    print("Carrots are already in the list.")

if "cucumbers" not in vegetables:
    vegetables.append("cucumbers")
else:
    print("Cucumbers are already in the list.")

vegetables.sort()
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.
  • Usa not in per verificare l'assenza di un elemento.

Confronto: liste semplici e liste annidate

# Liste semplici: un valore per elemento
fruits = ["apple", "banana", "cherry"]

# Liste annidate: più valori per elemento
products = [
    ["apple", 1.27, 12],
    ["banana", 0.59, 6],
    ["cherry", 3.99, 20]
]

# Accesso:
# Lista semplice: fruits[0] -> "apple"
# Lista annidata: products[0][0] -> "apple", products[0][1] -> 1.27
← → per navigare F fullscreen