Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Programación

Comprensión de listas en Python

Alura
Alex Felipe
Alex Felipe
18/11/2020

Compartir

En un sistema de registro de productos que estoy desarrollando en Python, para un mercado, tenemos la siguiente clase que representa un producto:

class Producto(object): 
  def __init__(self, nombre, valor, cantidad):
   self.__nombre = nombre 
   self.__valor = valor 
   self.__cantidad = cantidad
  def __repr__(self):
   return self.__nombre
  def get_nombre(self): 
    return self.__nombre
  def get_valor(self):
   return self.__valor
  def get_cantidad(self):
   return self.__cantidad
  def impresion(self): 
    return "nombre:%s valor:%s cantidad:%s" % (self.__nombre, self.__valor, self.__cantidad)

Dentro de este sistema, recibí una lista llamada productos:

productos = productos_en_stock()

Contiene los siguientes productos:

nombre:Arroz valor:10.5 cantidad:100 nombre:Porotos valor:6.5 cantidad:80 nombre:Gaseosa valor:3.0 cantidad:120 nombre:Cafe valor:5.45 cantidad:75 nombre:Jabón en polvo valor:8.75 cantidad:80 nombre:Queso Crema valor:3.5 cantidad:76 nombre:Leche valor:2.5 cantidad:132 nombre:pan de molde valor:2.0 cantidad:120 nombre:Cafe valor:5.45 cantidad:75 nombre:caja de bombon valor:6.75 cantidad:93

Sin embargo, el dueño del supermercado pidió revisar todos los productos que se estaban agotando, es decir, con cantidades inferiores a 100. Una solución de procedimiento a este problema sería crear un for, y luego, dentro de él, agregamos un if que verifica los productos con cantidades inferiores a 100 y, si es cierto, los agregamos a una nueva lista que contiene todos los productos que se están agotando. Por fin, devolvemos esta nueva lista:

pocas_ctd =  for producto in productos: if(producto.get_cantidad() < 100): pocas_ctd.append(producto)
print pocas_ctd

El resultado sería:

 [Porotos, Cafe, Jabon en polvo, Queso Crema, Cafe, caja de bombon]

Para una tarea muy simple, escribimos muchos códigos ... En otras palabras, ¡escribimos 3 líneas de código para resolver un problema muy común en una lista! ¿Es posible resolver esto de una manera más ajustada y objetiva?

En Python, además de las características básicas que se encuentran en muchos lenguajes de programación, es decir, instrucciones para for, if y else entre otras. También tenemos una función muy interesante llamada comprensión de lista, que nos ayuda mucho a manipular datos en una lista. Por ejemplo, para resolver el mismo problema que acabamos de ver usando la comprensión de listas, haríamos lo siguiente:

pocas_ctd = [producto for producto in productos if producto.get_cantidad() < 100] 
print pocas_ctd

Veamos el resultado:

Porotos, Cafe, Jabon en polvo, Queso Crema, Cafe, caja de bombon

¡Exactamente el mismo resultado! Sin embargo, ¡mira que ahora resolvimos en una sola línea! Además, ¡sin la necesidad de crear una lista vacía! Pero, ¿cómo ocurrió eso?

Comprensión de lista itera sobre todos los elementos de una lista y realiza una acción para cada ítem encontrado de acuerdo con el filtro que utilizamos. Es decir, se describe con la siguiente estructura:

acción a realizar, ítems iterados, filtro

  • acción a tomar: Acción deseada para cada ítem. (En este ejemplo solo devolvemos el ítem).
  • ítems iterados: lista que queremos iterar y extraer sus ítems.
  • filtro: Donde aplicamos las condiciones para devolver los ítems de una lista.

Supongamos que esta vez, el dueño de ese supermercado pidió verificar todos los productos con valores abajo de 10,00, y luego, para cada uno de estos productos, agregar un 10% al valor original. ¿Cómo haríamos eso? ¿Solo resulta en modo procedimental? Para nuestra felicidad, a través de la comprensión de lista, ¡también podemos realizar operaciones aritméticas! Veamos cómo quedaría:

producto.agregar_valor(producto.get_valor() * 0.10) 
  for producto in productos if producto.get_valor() < 10

Si imprimimos nuestros productos:

for producto in productos: print producto.impresion()

Tenemos el siguiente resultado:

nombre:Arroz valor:10.5 cantidad:100 nombre:Porotos valor:7.15 cantidad:80 nombre:Gaseosa valor:3.3 cantidad:120 nombre:Cafe valor:5.995 cantidad:75 nombre:Jabon en polvo valor:9.625 cantidad:80 nombre:Queso crema valor:3.85 cantidad:76 nombre:Leche valor:2.75 cantidad:132 nombre:pan de molde valor:2.2 cantidad:120 nombre:Cafe valor:5.995 cantidad:75 nombre:caja de bombon valor:7.425 quantidade:93

Cómo podemos ver los productos: "Porotos, Gaseosa, Café, Jabón en Polvo, Queso Crema, Leche, Pan de molde, Café y Caja de bombon". ¡Sufrieron un aumento del 10% con un código de solo 1 línea!

¿Qué tal aprender más sobre Python y sus diversos recursos? Entonces, ¡Mira nuestros cursos de Python para Data Science aquí en Alura!

Alex Felipe
Alex Felipe

Alex é instrutor e desenvolvedor e possui experiência em Java, Kotlin, Android. Atualmente cria conteúdo no canal https://www.youtube.com/@AlexFelipeDev.

Artículo Anterior
Cómo separar palabras de String en Java
Siguiente Artículo
Conozca la API de fechas de Java 8

Ver otros artículos sobre Programación

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast