Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre que son y para que sirven las comprensiones.

Anuncios

Las comprensiones son una notacion concisa, ambas realizan alguna operacion para una coleccion de elementos y/o seleccionan un subconjunto de ellos que cumplan una condicion, estos se toman prestados del lenguaje Haskell y contribuyen a darle a pyhton una mejor funcionalidad junto a los iteradores y generadores, se nos ofrece unos diferentes tipos de comprension, veamos algunos:

  • list
  • dict
  • set
Anuncios

Por el momentos nos centraremos en la primera funcion, para ello vamos a analizar el siguiente ejemplo:

>>> cuadrados = []
>>> for n in range(10):
...     cuadrados.append(n ** 2)
... 
>>> cuadrados
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>
Anuncios

Este es un ejemplo simple pero lejos del concepto de python porque primero creamos una lista llamada cuadrados, luego por medio de un bucle agregaremos los cuadrados de un rango de numeros del 0 al 9, por ultimo lo mostramos pero este codigo se puede mejorar, veamos como transformarlo:

>>> cuadrados = map(lambda n: n ** 2, range(10))
>>> _(cuadrados)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> 
Anuncios
Nota: Recuerden que el guion bajo es un alias de list:
_ = list
Anuncios

En este caso reemplazamos todo lo anterior por un map y una funcion anonima, despues hacemos un list de lo almacenado en cuadrados, como vemos nos da el mismo resultado pero con un estilo mas python, vamos a tomar este ejemplo y vamos a transformarlo por medio de list, para ello haremos lo siguiente:

>>> [n ** 2 for n in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>
Anuncios

No quedo mucho mas monono? Basicamente lo que hicimos fue primero crear la operacion de cuadrado que usamos siempre, luego agregamos un bucle for donde asignaremos un valor a n para elevarlo al cuadrado, como pueden ver obtuvimos exactamente el mismo resultado.

Anuncios

Con esto cubrimos lo basico para trabajar con un list y las comprensiones, pasemos a ver un ejemplo donde utilizaremos primero a map y filter:

>>> cuad1 = list(map(lambda n: n ** 2,
...     filter(lambda n: not n % 2, range(10)))
... )
>>>
Anuncios
Nota: Utilizo list y no el alias para que se vea mas claro
Anuncios

Aca creamos una lista que por medio de map y lambda, el primer lambda sera para elevar el valor al cuadrado y despues usamos a filter donde solo pasaremos los valores del range que sean pares, con esto almacenaremos los cuadrados de los numeros pares, para el siguiente paso haremos lo mismo pero con la comprension de list:

>>> cuad2 = [n ** 2 for n in range(10) if not n % 2]
>>>
Anuncios

Como pueden ver es muy similar al primer ejemplo de comprension de list pero lo unico que hicimos fue agregar un condicional donde no lo ejecutara si el numero es impar debido al resultado de la operacion del modulo, para chequear si es verdad vamos a mostrar al primer nombre para verificar si funciono y luego chequearemos entre ambas para ver si coinciden o no mediante la siguiente funcion:

>>> print(cuad1, cuad1 == cuad2)
[0, 4, 16, 36, 64] True
>>>
Anuncios

Como pueden ver al mostrarlo solo nos trajo los cuadrados de los numeros pares, como habiamos solicitado, y el segundo valor es True siendo el resultado de la comparacion entre los dos valores, como pueden ver la comprension en list es bastante simple, podemos considerarlo de la siguiente manera:

[ coleccion funcion ]
Anuncios
Anuncios

Siempre informaremos una coleccion o una operacion para nuestra coleccion, seguido de una funcion que puede ser bucle para enviar nuestro objeto iterable o coleccion y a su vez tambien puede ser un condicional para filtrar de mejor forma los datos de la coleccion, la escritura es simple su unico elemento separador debe ser el espacio y siempre deben estar entre corchetes, no se preocupen con el uso y proximos ejemplos iremos afianzando este concepto, en los proximos posts iremos viendo los otros tipos de comprension.

Anuncios

En resumen, hoy hemos hablado que es la comprension, como este concepto nos permte reducir a su minima expresion un codigo, como nos «facilita» la legibilidad y nos reduce el tamaño de un codigo, tambien vimos que mientras nos manejemos entre los corchetes con sintaxis validas podremos realizar una mejor comprension del codigo, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00