Aprende cómo reduce() en Python puede transformar tus datos en un solo paso

| Última modificación: 27 de noviembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

El reduce() en Python es una herramienta muy versátil que te ayuda a simplificar el proceso de convertir múltiples valores en uno solo. Si bien es menos conocida que otras funciones como map() o filter(), tiene una capacidad para manejar tareas complejas en un solo paso. Veamos cómo funciona y qué provecho puedes sacar de ella.

reduce() en python

¿Qué es reduce() en Python?

reduce() es una función del módulo functools que aplica de forma acumulativa una función a los elementos de un iterable, ya sean listas, tuplas o cualquier otro elemento, reduciéndolos a un solo valor. Funciona tomando los dos primeros elementos de la secuencia, aplicando una función definida, y luego reutilizando el resultado para combinarlo con el siguiente elemento. Este proceso continúa hasta que solo queda un valor final.

La sintaxis de reduce() funciona del siguiente modo: solo necesitas importar la función desde functools y luego pasarle una función y un iterable:

from functools import reduce
reduce(función, iterable)
  • función: Es una función que toma dos argumentos y devuelve un valor.
  • iterable: El conjunto de datos a procesar, como una lista o tupla.

La salida será un único valor que representa el resultado de aplicar la función de manera acumulativa.

Veamos algunos ejemplos

  • Vamos a sumar los elementos de una lista usando reduce():
from functools import reduce

numeros = [1, 2, 3, 4, 5]

resultado = reduce(lambda a, b: a + b, numeros)
print(resultado) # Salida: 15

En este caso, la función lambda suma dos números a la vez hasta reducir la lista completa a un solo valor: 15.

  • Ahora vamos a encontrar el máximo en una lista:
from functools import reduce

numeros = [3, 7, 2, 8, 4]

maximo = reduce(lambda a, b: a if a > b else b, numeros)
print(maximo) # Salida: 8
  • Vamos a multiplicar todos los elementos de una lista:
from functools import reduce

numeros = [2, 3, 4]

producto = reduce(lambda a, b: a * b, numeros)
print(producto) # Salida: 24
  • Vamos a concatenar cadenas:
from functools import reduce

palabras = ["Python", "es", "genial"]

frase = reduce(lambda a, b: a + " " + b, palabras)
print(frase) # Salida: "Python es genial"
  • Usaremos operadores para mayor claridad: En lugar de usar funciones lambda, también puedes combinar reduce() con el módulo operator para mejorar la legibilidad:
from functools import reduce
import operator

numeros = [1, 2, 3, 4]

suma = reduce(operator.add, numeros)
print(suma) # Salida: 10

¿Qué es mejor, el reduce() o los bucles tradicionales?

Imagina que necesitas multiplicar todos los elementos de una lista. Con un bucle tradicional, el código sería algo así:

numeros = [2, 3, 4]
producto = 1

for num in numeros:
producto *= num

print(producto) # Salida: 24

🔴 ¿Quieres Aprender a Programar con Python? 🔴

Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semana

Aunque funcional, este enfoque requiere más líneas de código y es menos legible. Con reduce():

from functools import reduce

producto = reduce(lambda a, b: a * b, [2, 3, 4])
print(producto) # Salida: 24

El resultado es el mismo, pero el código es mucho más compacto y claro.

reduce() vs accumulate()

Aunque ambas funciones realizan tareas similares, hay diferencias clave:

  • reduce() devuelve solo el resultado final.
  • accumulate() devuelve un iterador con todos los resultados intermedios.

Por ejemplo, sumar los elementos de una lista con accumulate():

from itertools import accumulate

numeros = [1, 2, 3, 4]

resultado = list(accumulate(numeros, lambda x, y: x + y))
print(resultado) # Salida: [1, 3, 6, 10]

En este caso, puedes ver cómo se construye el resultado paso a paso.

Si te interesa el campo de la tecnología y quieres iniciar en su aprendizaje, te dejamos disponible el bootcamp de programación desde cero, con el cual aprenderás todos los fundamentos teóricos y prácticos para iniciar tu vida en el campo laboral más destacado del mercado, creando tus primeros programas y entendiendo la estructura de los programas. ¡Únete ahora a la mejor comunidad!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Aprende a Programar desde Cero

Full Stack Jr. Bootcamp

Apúntate y consigue uno de los perfiles más demandados con Python en solo 4 meses.