Apredne a opitmziar tu código con Map, Filter y Reduce en python.

Apredne a opitmziar tu código con Map, Filter y Reduce en python.

Técnicas de optimización de código.

Vamos a hablar de unas técnicas y recomendaciones para mejorar la eficiencia de nuestros programas escritos en python. Más concretamente vamos a hablar de:

Listas de compresión.

La compresión de listas (list comprehension) en Pyton en una forma má concisa y legible de crear listas nuevas a partir de otras colecciones (iterables) en una sola línea, aplicando una expresión y filtros condicionales, resultando más rápido usando bucles for tradicionales. Su sintaxis básica es:

nueva_lista=[expresion for elemento in iterable]

Vamos a poner un ejemplo en el que queremos separar las letras de la fras Javi Lázaro programando en Python. Con lo que hemos visto hasta ahora con la lista de programación sería de la siguiente manera:

letras=[]
for i in "Javi Lázaro programando en Python":
    letras.append(i)

print(letras)
# Nos devolverá: ['J','a', 'v', 'i', ' ', 'L', 'á', 'z', 'a', 'r', 'o', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm', 'a', 'n', 'd', 'o', ' ', 'e', 'n', ' ', 'P', 'y', 't', 'h', 'o', 'n']

Sin embargo tenemos una forma más eficiente para de hacer esta operación, y es con lo llamado compresión de listas, con lo que quedaría de esta manera:

letras=[i for i in "Javi Lázaro programando en Python"]
print(letras)

En estas listas de compresión también podemos utilizar condicionales con lo que la sintaxis de este código sería el siguiente:

variable=[resultado1 if condicion1 else resultado2 for item in list]

Aquí te dejo un ejemplo para que entiendas mejor como sería con un código:

pares=[i for i in range(1,21) if i%2==0]
print("Los números pares entre 1 y 20 son: ", pares)
# Los números pares entre 1 y 20 son: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Por lo general, el uso de compresión de listas aumenta la eficiencia por que rebaja el tiempo de ejecución y operación y es más rápido que haciendo el uso de bucles tradicionales.

Funciones de eficiencia de código.

Exites tres funciones principales que, incluyéndolas en nuestro programa, permite la mejora y eficiencia de nuestro código. Esta eficiencia además de ser en el tiempo de ejecuyción, hace que nuestro código sea más interpretable, facilitando así el mantenimiento de este. En este post hablaremos sobre los tres más conocidos: map, filter y reduce.

Map.

La función map nos permite aplicar una determinada función a un conjujnto de elementos trabajando uno por uno. Imaginemos que queremos calcular el cuadrado de una lista de núemros:

elementos=[2,3,4,5,6,7]
cuadrados=[]
for i in elementos:
    cuadrados.append(i**2)
print(f"El cuadrado de la lista es: {cuadrados}")
# Devuelve: El cuadrado de la lista es: [4, 9, 16, 25, 36, 49]

Con la función map podemos implementar esta operación de una forma más simple y eficaz:

elementos=[2,3,4,5,6,7]

def cuadrado(n):
    return n**2

cuadrados=list(map(cuadrado, elementos))
print(f"El cuadrado de la lista elementos es: {cuadrados}")
# Devuelve: El cuadrado de la lista es: [4, 9, 16, 25, 36, 49]

Filter.

Otra de las funciones que nos encontraremos en diferentes códigos para la eficiencia y simple de trabajar es filter. Tal y como indica el nombre, porque seamos sinceros es de los más representativos que encontramos, esta función crea una lista de elementos para los cuales una determinada función nos devuelve True.

def es_par(n):
    return n%2==0

numeros=list(range(1,21))

pares=list(filter(es_par, numeros))
print(pares)

#Devuelve: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Reduce.

Por último, la función reduce nos permite realizar cálculos sobre los elementos de la lista y devolver un resultado determinado. La mayor diferencia en la configuración de reduce es que tenemos que *importar la librería functools*. Vamos a ver un ejemplo:

from functools import reduce

def multiplica(m: int,n: int)-> int:
    return m*n

numeros=list(range(1,10))
producto=reduce(multiplica, numeros)

print(f"El productor de todos los elementos es: {producto}")
#Devuelve: El producto de todos los elementos es: 362880

Conclusión

La compresión de lista es una fotrma de recorrer y operar con listas, es más eficiente que los bucles traidcionales, pero también es cierto que suelo empezar a trabajar con los bucles más tradicionales y luego paso a hacer estas optimizaciones más adelante. También es cierto que todas las compresiones de listas puedes hacerlas con bucles, pero no todos los bucles podrás hacerlos con compresiones. Además hay que tener en cuenta map, filter y reduce ya que pueden hacer que bajemos el número de líneas en el código y con ello la optimización y sobre todo por la parte que más nos puede afectar el mantenimiento de este código.

¿Listo para hacer crecer tu negocio?

Analicemos tu proyecto y definamos la estrategia perfecta para alcanzar tus objetivos

Solicitar consultoría gratuita