Curso Avanzado de Desarrollo en Python
Capítulo
>
Nivel
Listas Avanzadas
Comprensiones de listas
En este capítulo vamos a explorar nuevas formas de utilizar listas en Python, en lo que respecta a la optimización, la compartimentalización e incluso a la creación de listas multidimensionales grandes, como matrices, que se parecen mucho a tablas.
En este nivel trabajaremos con List Comprehensions; estas son listas que se pueden crear a partir de otras listas, seleccionando únicamente ciertos componentes de las mismas. Esto también se realiza en una sola línea de código muy directa, sin tener que introducir manualmente una lista o idear automatizaciones complejas.

Objetivo
Recoge y clasifica todas las verduras de raíz en la despensa para que puedas guardarlas en su lugar correcto usando comprensiones de listas.
La despensa tiene varios sacos llenos de verduras de raíz que necesitan ser clasificadas, tales como: potatoes, onions y garlic. Es probable que contengan verduras en mal estado. Extrae las verduras que están en buen estado y guárdalas en las cajas correspondientes.
Para lograr esto, necesitas identificar qué elementos hay dentro de cada saco. Existen tres (3) constantes de lista que contienen la información de cada uno de los sacos, y se llaman: left_sack, middle_sack, right_sack. Estas constantes corresponden a los sacos en el campo, ubicados en los lugares indicados por sus nombres.
Dirígete hacia las marcas luminosas en forma de X frente a cada saco y utiliza la función speak() para identificar el contenido de cada uno usando las constantes, por ejemplo: player.speak(left_sack). Una vez que hayas identificado el contenido de cada saco, detecta los elementos que deben eliminarse, como las verduras cuyo nombre contenga: "Bad", "Spoiled" o "Rotten".
Necesitas crear nuevas listas que solo contengan elementos aptos para el consumo. Podrías hacerlo manualmente, pero tomaría mucho tiempo y podría resultar bastante confuso. Para lograrlo de manera más efectiva, puedes crear una lista a partir de otra lista, lo que se conoce como Comprensión de Listas.
A partir de las tres (3) constantes de lista: left_sack, middle_sack, right_sack, crea tres nuevas listas llamadas: potatoes, onions y garlic que no contengan los elementos indeseados en los sacos. Las Comprensiones de Listas te permiten crear nuevas listas sin necesidad de escribir mucho código; por ejemplo:
# 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"]
En el ejemplo anterior, la lista llamada potatoes se crea a partir de la lista llamada sack, conteniendo únicamente ["Potatoes", "Sweet Potatoes"] y excluyendo "Spoiled Potatoes". Esto se logra creando un bucle for autónomo, en este caso usando x como índice para recorrer la lista y las sentencias for / in para identificar y excluir el elemento no deseado, es decir, cualquier cadena que contenga la palabra "Spoiled".
Para recapitular, verifica si las constantes de lista contienen la palabra "Bad", "Spoiled" o "Rotten" en ellas, utilizando la función speak(). Crea las listas potatoes, onions y garlic utilizando Comprensiones de Listas, eliminando los elementos no deseados que encuentres en cada una.
Una vez que estas listas estén creadas, dirígete hacia cada una de las tres (3) marcas de X doradas frente a las cajas con los letreros de las verduras, y coloca las listas en las cajas correspondientes utilizando la función place(), para completar el nivel. Las ubicaciones están señaladas por los letreros: onions en la caja izquierda, potatoes en la caja central y garlic en la caja izquierda.