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.
¿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 semanaAunque 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!