Python Comprehensions

python comprehensions comprehension in python
k

22/11/2023

Python Comprehensions types

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.

 

comprehension lists

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.

Py

# 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.

Py

# 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.

Py

# 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 { }.

Py

Py

# 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.

Py

# 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.

Py

# 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.

Py

# 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.

 

creatuwebpymes quien somos

Francisco Brito Diaz

CEO de creatuwebpymes.com, empresa de diseño web y marketing digital en Canarias. 

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para fines de afiliación y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad