Corso Avanzato di Sviluppo Python
Capitolo
>
Livello
Liste Avanzate
Comprensioni di liste
In questo capitolo esploreremo nuovi modi di utilizzare le liste in Python, riguardanti l'ottimizzazione, la compartmentalizzazione e perfino la creazione di grandi liste multidimensionali, come matrici, che ricordano tabelle.
Per questo livello lavoreremo con le List Comprehensions, ovvero liste che possono essere create a partire da altre liste selezionando solo determinati componenti. Questo viene fatto in una singola riga di codice in modo molto diretto, senza dover inserire manualmente una lista o inventare automazioni complesse.

Obiettivo
Raccogli e ordina tutte le verdure a radice nella dispensa così potrai riporle al loro posto corretto utilizzando le list comprehension.
La dispensa contiene diverse sacchi pieni di verdure a radice che devono essere ordinate, vale a dire: potatoes, onions e garlic. È probabile che vi siano delle verdure andate a male. Rimuovi le verdure buone e riponile nei cassonetti a cui appartengono.
Per fare ciò devi identificare quali elementi sono presenti in ciascun sacco. Ci sono tre costanti di lista che contengono le informazioni di ciascuno dei sacchi, questi sono nominati: left_sack, middle_sack, right_sack. Queste costanti di lista corrispondono ai sacchi presenti sul campo nelle posizioni indicate dai loro nomi.
Cammina fino ai segnali luminosi a forma di X davanti ad ogni sacco e usa la funzione speak() per identificare il contenuto di ciascun sacco utilizzando le costanti, per esempio: player.speak(left_sack). Una volta identificato il contenuto all'interno di ciascun sacco, individua gli elementi che devono essere rimossi, come le verdure con: "Bad", "Spoiled" o "Rotten" nel loro nome.
Devi creare nuove liste che contengano solo gli elementi buoni per il consumo. Potresti farlo manualmente, ma richiederebbe molto tempo e potrebbe diventare piuttosto confusionario. Per fare ciò in modo più efficace, puoi creare una lista a partire da un'altra lista, questo è noto come List Comprehension.
Dalle tre costanti di lista: left_sack, middle_sack, right_sack crea tre nuove liste chiamate: potatoes, onions e garlic che non contengono elementi indesiderati presenti nei sacchi. Le List Comprehensions ti permettono di creare nuove liste senza dover scrivere una quantità enorme di codice, per esempio:
# Original list sack = ["Potatoes", "Sweet Potatoes", "Spoiled Potatoes" ] # List Comprehension potatoes = [x for x in sack if not "Spoiled" in x] # This will create a list named potatoes with: # ["Potatoes", "Sweet Potatoes"]
Nell'esempio sopra, la lista chiamata potatoes viene creata a partire dalla lista denominata sack contenendo solo ["Potatoes", "Sweet Potatoes"] ed escludendo "Spoiled Potatoes". Questo viene ottenuto creando un ciclo for autonomo, in questo caso utilizzando x come indice per scorrere la lista e le istruzioni for / in per identificare ed escludere l'elemento indesiderato, ovvero qualsiasi stringa che contenga la parola "Spoiled".
Per riassumere, verifica se le costanti di lista contengono le parole "Bad", "Spoiled" o "Rotten" utilizzando la funzione speak(), crea le liste potatoes, onions e garlic usando le List Comprehensions rimuovendo gli elementi indesiderati trovati in ciascuna lista.
Una volta create queste liste, cammina verso ciascuno dei tre segnali d'oro a forma di X davanti ai cassonetti con i cartelli delle verdure e posiziona le liste, utilizzando la funzione place(), nei cassonetti corrispondenti per completare il livello. Le posizioni sono indicate dai cartelli, vale a dire onions sul cassonetto sinistro, potatoes sul cassonetto centrale e garlic sul cassonetto sinistro.