Typos de Python Comprehensions
En el lenguaje Python Comprehensions es una fácil manera de recorrer los bucles sobre una secuencia de código.
Nos permite utilizar una sintaxis más sencilla y corta para cualquier operación que hagamos con los bucles. En este artículo cubriremos los siguientes puntos:
👉 Comprehension en Listas
Supongamos que queremos crear un lista a partir de los valores de otra lista ya existente. Esto se podría hacer con loop y slicing, que es lo que conocemos como el método clásico.
Pero hay una forma más sencilla y que nos ahorra mucho código y es la comprehension. La sintaxis de la misma se puede ver en la imagen abajo.

Veamos un ejemplo de ambos casos, es decir el método clásico y con comprehension, de esta forma se podrá apreciar claramente la diferencia. Crearemos una lista de los números al cuadrado de los dígitos entre 1 y 10 excluidos.
# a través del método clásico con el loop
# primero crearemos la lista vacia
cuadrados = [ ]
for i in range(1,11):
cuadrados.append(i)
print(cuadrados)
# El resultado será [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# El otro método, python comprehension sería: cuadrados = [i**2 for i in range(1,11)] print(cuadrados)
# El resultado será [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
En la primera parte del ejemplo anterior podemos ver hemos definido una variable llamado cuadrados, a la que asignamos una lista vacía. Esto es para guardar los cuadrados de los números resultantes del loop. Luego organizamos el loop con el método range(1 a 11) porque cómo ya sabemos el 11 se excluye, con lo que llegará hasta 10. Luego a la lista cuadrados le añadimos elementos con el método append.
Con respecto al segundo método utilizamos Comprehension, vemos que definimos una lista llamada cuadrados y dentro de los [ ] empezamos por establecer el output i**2 de la colección i in range(1,11) con lo que nos dará el mismo resultado que el anterior, pero todo ello con una sola línea de código.
Veamos otro ejemplo de cómo utilizar comprehension en Python y cómo utilizar el método más clásico y tradicional con el loop.
En este nuevo ejemplo convertiremos un texto 'mi coche' en mayúsculas y luego las añadiremos a la lista.
# convertir las letras de 'mi coche' en mayúsculas y añadirlas a la lista
texto = 'mi coche'
# creamos una lista vacía llamada mayusculas
mayusculas = [ ]
for letra in texto:
mayusculas.append(letra.upper())
print(texto)
# ['M','I','','C','O','C','H','E']
# con comprehension
mayusculas = [i.upper() for i in texto]
print(mayusculas)
# ['M','I','','C','O','C','H','E']
En la primera parte del ejemplo anterior podemos ver hemos definido una variable llamado texto , a la que asignamos una string texto = 'mi coche'. Esta string es recorrida por un loop for for letra in texto:
También creamos una lista vacía llamada mayusculas mayusculas = [ ]
La lista vacía mayusculas se llena a través del método append mayusculas.append de los elementos de texto convertidos en mayúsculas (letra.upper()del texto.
Con respecto al segundo método utilizado, Comprehension, vemos que definimos una lista llamada mayusculas y dentro de los [ ] empezamos por establecer el output i.upper() de la colección for i in texto con lo que nos dará el mismo resultado que el anterior, pero todo ello con una sola línea de código.
👉 Comprehension en Diccionarios
La comprehension en diccionarios es muy similar a la comprehension en listas, pero con la única diferencia que devuelve un diccionario en lugar de una lista. Esta se define con un par de { }.
Para entenderlo podemos utilizar el siguiente ejemplo donde tendremos dos listas, y las combinaremos en un diccionario. La key del diccionario será una lista y el value será la otra lista.
Como hicimos anteriormente empezaremos con un loop y posteriormente haremos una comprehension.
# Tenemos dos listas que convertiremos en un diccionario
fruta = ['banana','naranja','fresa']
color = ['amarilla','naranja','roja']
# con loop
# creamos un diccionario vacio
fruta_color = {}
for key,value in zip(fruta,color):
fruta_color[key] = value
print(fruta_color)
# {'banana':'amarilla','naranja':'naranja','fresa':'roja'}
# con comprehension
fruta_color = {key:value for key,value in zip(fruta,color)}
print(fruta_color)
# {'banana':'amarilla','naranja':'naranja','fresa':'roja'}
Como vemos en la parte superior, hemos creado un diccionario vacío llamado fruta_color al que añadiremos los key, value de las dos listas fruta y color.
Al utilizar zip() estamos creando una tuple, pero luego la deconstruimos en dos variables key y value. Finalmente las añadimos al diccionario fruta_color con el código fruta_color[key] = value
El otro método - comprehension - es más sencillo que se hace en una sola línea de código {key:value for key,value in zip(fruta,color)}
👉 Comprehensions en Sets
La sintaxis de la comprehension en los sets es muy similar a la de las listas, pero con la diferencia que devuelve un set en lugar de una lista. Recordemos que los set se ponen entre dos { }.
# Supongamos que tenemos una string o texto
palabra = 'manzana'
# con el método loop, crearemos un set vacío
fruta = set()for i in palabra:
fruta.add(i)
print(i)
# {'m','a','n','z'}
# con el metodo comprehension
fruta = {i in i for palabra}
print(i)
# {'m','a','n','z'}
Recordar que en el set no se permite la repetición de los elementos que lo componen de ahí el resultado final de # {'m','a','n','z'}
👉 Comprehensions anidadas
Utilizamos comprehensions anidadas en la misma forma que utilizamos los loops anidados. Veamos ejemplos para un mayor entendimiento.
Supongamos que tenemos dos listas equipo y jugador y queremos crear una nueva lista de tuples. Los nuevos elementos de esta lista serán los pares de los elementos de estas listas.
# creamos una lista vacia para almacenar el resultado
seleccion = [ ]
for equipo in equipos:
for jugador in jugadores:
grupo = (equipo,jugador)
seleccion.append(grupo)
print(seleccion)
# [('Argentina','Messi'),('Portugal','Ronaldo'),('España','Busquets')]
# con comprehension
seleccion = [(equipo,jugador) for equipo in equipos for jugador in jugadores)]
print(seleccion)
# [('Argentina','Messi'),('Portugal','Ronaldo'),('España','Busquets')]
En el primer método creamos una lista vacía. Luego recorremos un loop para cada lista for equipo in equipos:y for jugador in jugadores:. Creamos una tuple que recoja dichos resultados grupo = (equipo,jugador) y los añadimos a la lista que habíamos creado con el método append seleccion.append(grupo).
👉 Comprehensions en condicionales
Como hemos dicho anteriormente mejor entender con un ejemplo. Vamos a buscar los numeros impares entre 1 y 10.
# con loop
# creamos la lista vacia
impares = [ ]
for i in range(1,11):
if i % 2 == 1:
impares.append(i)
print(impares)
# [1,3,5,7,9]
#con comprehension
impares = [i for i in range(1,11) if i % 2 == 1]
print(impares)
# [1,3,5,7,9]
Como regla general si utilizamos una estructura if-else en comprehension, el código es exactamente igual que si lo hacemos con loop.
Otro ejemplo de comprehension en condicionales podemos crear un diccionario para números pares del 2 al 10. Donde el key sea el número y el value será una lista de los factores positivos de ese número.
# con loop
# creamos la lista vacia
factores = { }
for i in range(2,11):
if i % 2 == 0:
for j in range(2,i+1):
if i % j == 0:
if not in factores:
factores[i]=[j]
else:
factores[i].append(j)
print(factores)
# {2:[2],:[2,4],6:[2,3,6],8:[2,4,8],10:[2,5,10]}
#con comprehension
factores = {i:[j for j in range(2,i+1) if i % j == 0] for i in range(2,11) if i % 2 == 0}
print(factores)
# {2:[2],:[2,4],6:[2,3,6],8:[2,4,8],10:[2,5,10]}
En definitiva, el Python comprehensions son importantes porque nos permiten reducir el código empleado haciendolo más limpio y ordenado. Esta es una lección que los estudiantes del lenguaje Python suelen preguntar mucho, cuando empiezan a programar en este lenguaje.
Si queréis seguir aprendiendo a programar en Python, podéis encontrar más recursos en este enlace. Musa Arda . Creatuwebpymes, es una empresa de Diseño y programación de páginas web en Canarias que ❤️ la programación.







