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)
Oscar Varón dice
Muy buen articulo, felicitaciones !!! claro, conciso y entendible
Gustavo dice
Me sirvio bastante!
Domingo dice
Muchas gracias por toda esta explicación para mi que que no soy veterano.
Me permito hacer una pregunta, ya que he entendido todo, salvo el siguiente ejemplo:
numbers = [1, 2, 3, 4]
results = [n + 1 if n < 3 else n for n in numbers]
results
No entiendo el 3 dos veces?
Perdone que le haga perder tiempo,
Atentamente,
Domingo Velazquez
[email protected]
Daniel Rodríguez dice
Posiblemente no sea el mejor ejemplo, pero lo que hace es sumar un número a todos los valores que sean menores de 3, por eso solo cambian los dos primeros y aparecen dos 3.
Domingo Velazquez dice
Gracias, ya lo entendí.
Domingo Velazquez