Python

Listas por comprensión en Python

Las listas por comprensión es una construcción sintáctica disponible en Python con la que se pueden crear lista a partir de otros elementos iterables. Siendo una de las contracciones más elegantes del lenguaje. A continuación, se mostrará la sintaxis básica para trabajar con las listas por comprensión.

Sintaxis de las listas por comprensión en Python

Las sintaxis básicas de las listas por comprensión en Python se pueden resumir en la siguiente línea:

nueva_lista = [expresion bucle_for condiciones]

Entre corchetes se escribe una expresión seguida de un bucle for sobre el que se itera, para finalmente escribir unas condiciones.

Ejemplo básico de uso

Un ejemplo básico de uso de las listas por comprensión es aplicar una operación sobre un vector. Por ejemplo, añadir una cantidad a todos los elementos de este. Lo que se puede hacer con un bucle tradicional

numbers = [1, 2, 3, 4]
results = []

for n in numbers:
    results.append(n + 1)
    
results
[2, 3, 4, 5]

Aunque es más elegante utilizar las listas por comprensión

numbers = [1, 2, 3, 4]
results = [n + 1 for n in numbers]

Obteniéndose el mismo resultado solamente con mucho menos código. En el código los corchetes indican que la salida de la lista n + 1 es la expresión que ejecutar para cada uno de los elementos del bucle for. Es decir, que a cada uno de los valores sobre los que se itera se añada se le sume la unidad.

Condiciones en las listas por comprensión

Tal como se ha indicado anteriormente es posible añadir condiciones a las listas por comprensión en Python. Para lo que solemne se tiene que agregar un if al final con la condición. Siguiendo con el ejemplo anterior, se podría sumar uno solamente a los registros que sean menores que tres.

numbers = [1, 2, 3, 4]
results = [n + 1 for n in numbers if n < 3]
results
[2, 3]

Al ejecutar el código se puede observar que solamente se tienen dos registros, los que cumple la condición. En el caso de que se desee realizar una operación diferente cuando no se cumple la condición se puede hacer con un else. Aunque es necesario cambiar modificar el orden. Si se utiliza un else la condición se tiene que situar justamente después de la expresión y antes del for. Por ejemplo, en el siguiente código los números mayores o iguales que tres se dejan sin modificar.

numbers = [1, 2, 3, 4]
results = [n + 1 if n < 3 else n for n in numbers]
results
[2, 3, 3, 4]

Identificar los numero comunes en dos listas

La posibilidad de anidar bucles for en las listas por comprensión permiten realizar operaciones realmente completadas. Así se puede iterar sobre varios objetos iterables para aplicar una condición.

Un ejemplo típico de esto es buscar el conjunto de elementos comunes en dos listas. Lo que se puede conseguir de con el siguiente código.

names_1 = ['Oralie' ,'Imojean' ,'Michele', 'Ailbert', 'Stevy']
names_2 = ['Jayson', 'Oralie' ,'Michele', 'Stevy', 'Alwyn']

common = [a for a in names_1 for b in names_2 if a == b]
common
['Oralie', 'Michele', 'Stevy']

En donde se selecciona el valor de la primera lista si al iterar sobre la segunda también se encuentra en esta. Si no aparece el registro de ignorará. Para hacer esto mismo con un bucle for tradicional es necesario escribir mucho más código.

list_a = ['Oralie' ,'Imojean' ,'Michele', 'Ailbert', 'Stevy']
list_b = ['Jayson', 'Oralie' ,'Michele', 'Stevy', 'Alwyn']
common = []

for a in names_1:
    for b in names_2:
        if a == b:
            common.append(a)

Conclusiones

En esta entrada se han visto las listas por comprensión en Python, una construcción sintáctica disponible que ofrece grandes posibilidades. Permitiendo crear código más compacto y legible.

Las listas por comprensión son otra de las herramientas disponibles en Python que permite crear código compacto y elegante. Como los que se ha visto en la introducción a la programación funcional.

Imágenes: Pixabay (Pexels)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

13 horas ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

3 días ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

1 semana ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

1 semana ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

2 semanas ago

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

2 semanas ago

This website uses cookies.