En Python, reduce() es una función incorporada que aplica una función determinada a los elementos de un iterable, reduciéndolos a un solo valor.
La sintaxis para reducir() es la siguiente:
functools.reduce(function, iterable[, initializer])
- El argumento de función es una función que toma dos argumentos y devuelve un único valor. El primer argumento es el valor acumulado y el segundo argumento es el valor actual del iterable.
- El iterable El argumento es la secuencia de valores que se van a reducir.
- El argumento inicializador opcional se utiliza para proporcionar un valor inicial para el resultado acumulado. Si no se especifica ningún inicializador, el primer elemento del iterable se utiliza como valor inicial.
Aquí hay un ejemplo que demuestra cómo usar reduce() para encontrar la suma de una lista de números:
# Examples to understand the reduce() function from functools import reduce # Function that returns the sum of two numbers def add(a, b): return a + b # Our Iterable num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # add function is passed as the first argument, and num_list is passed as the second argument sum = reduce(add, num_list) print(f'Sum of the integers of num_list : {sum}') # Passing 10 as an initial value sum = reduce(add, num_list, 10) print(f'Sum of the integers of num_list with initial value 10 : {sum}')
Producción:
Sum of the integers of num_list : 55 Sum of the integers of num_list with initial value 10 : 65
En este ejemplo, usamos la función reducir() para aplicar una función agregar que devuelve la suma de dos valores a cada par de elementos en la lista de números, lo que da como resultado la suma de todos los elementos.
Usemos la función lambda como primer argumento de la función reducir():
# Importing reduce function from functools from functools import reduce # Creating a list my_list = [1, 2, 3, 4, 5] # Calculating the product of the numbers in my_list # using reduce and lambda functions together product = reduce(lambda x, y: x * y, my_list) # Printing output print(f'Product = {product}') # Output : Product = 120
Analicemos cómo reducir() La función funciona para el ejemplo dado:
La función reduce() toma dos argumentos: una función y un iterable. En este caso, usamos una función lambda lambda x, y: x * y como función y la lista de números como iterable.
- La función lambda acepta las variables xey, las multiplica y devuelve el resultado. Cuando se ejecuta inicialmente la función lambda, las variables x e y se establecen en el primer y segundo elemento, respectivamente, de my_list (es decir, x = 1 e y = 2). La función lambda multiplica estos dos números y devuelve el resultado (1 * 2 = 2).
- La segunda vez que se llama a la función lambda, x se establece en el resultado de la llamada anterior (x = 2) y y se establece en el tercer elemento de la lista de números (es decir, y = 3). Multiplica estos dos valores y devuelve el resultado (2 * 3 = 6).
- La función lambda se llama repetidamente de esta manera para cada elemento en my_list hasta que se hayan manejado todos los elementos. La función reducir() devuelve el producto de todos los elementos de la lista, que luego se asigna a la variable producto como 120. Este producto se calcula de la siguiente manera: ((((1 * 2) * 3)* 4)* 5) = 120.
- Finalmente, imprimimos el valor de la variable del producto usando la función print(), que genera 120.
función reducir() con funciones de operador
Podemos hacer que nuestro código sea más conciso y más fácil de leer utilizando funciones de operador en lugar de funciones lambda.
A continuación se muestra un ejemplo para demostrar el uso de funciones de operador como primer argumento de la función de reducción:
# Python program to demonstrate # how to use operator functions with reduce function # Importing reduce function from functools import reduce # Importing operator import operator # Creating lists my_list1 = [1, 2, 3, 4, 5] my_list2 = ['I', 'Love', 'Javatpoint'] # Calculating the sum of the numbers of my_list1 # using reduce and operator.add sum = reduce(operator.add, my_list1) # Calculating the product of the numbers of my_list1 # using reduce and operator.mul product = reduce(operator.mul, my_list1) # Concatenating all the elements in my_list2 # using reduce and operator.concat concated_str1 = reduce(operator.concat, my_list2) # We can achieve the same output by using operator.add concated_str2 = reduce(operator.add, my_list2) # Printing result print(f'Sum of all elements in my_list1 : {sum}') print(f'Product of all elements in my_list1 : {product}') print(f'Concatenated string by using operator.concat : {concated_str1}') print(f'Concatenated string by using operator.add : {concated_str2}')
Producción:
Sum of all elements in my_list1 : 15 Product of all elements in my_list1 : 120 Concatenated string by using operator.concat : ILoveJavatpoint Concatenated string by using operator.add : ILoveJavatpoint
Este código muestra cómo utilizar la función reduce() y las funciones de operador para realizar operaciones matemáticas y de cadenas en iterables en Python.
Comprender la diferencia entre las funciones reducir() y acumular():
El módulo de funciones de Python proporciona las funciones reducir() y acumular(), las cuales operan en iterables de manera comparable.
- El reducir () y acumular () las funciones son similares en que ambas aceptan dos argumentos: el iterable en sí y una función que describe la operación que se realizará en él. Sin embargo, la forma en que manejan los resultados de la operación es donde más difieren entre sí.
- El reducir () realiza la operación en los dos primeros elementos del iterable antes de ejecutar la misma operación en el resultado y el siguiente elemento. Este proceso se repite hasta que se hayan procesado todos los elementos del iterable. El resultado final de la operación se devuelve como un resultado único.
- Mientras que la acumular La función () también aplica la operación a los dos primeros elementos del iterable antes de realizar la misma operación en el resultado y los elementos posteriores, la función acumular() devuelve un iterador que contiene los resultados intermedios de la operación. En otras palabras, después de que cada elemento ha sido manejado, el acumular La función () proporciona una serie de valores que representan el resultado de la operación.
Un ejemplo para entender la diferencia entre acumular() y reducir():
# Python Program to demonstrate the difference # between reduce and accumulate # Importing reduce and accumulate function from functools import reduce, accumulate # Creating a list my_list = [1, 2, 3, 4, 5] # Using reduce() to calculate the product of all numbers product = reduce(lambda x, y: x * y, my_list) print(f'Product using reduce() : {product}') # Output: 120 # Using accumulate() to calculate the product of all numbers products = list(accumulate(my_list, lambda x, y: x * y)) print(f'Products using accumulate() : {products}')# Output: [1, 2, 6, 24, 120]
En este ejemplo, tenemos una lista de números [1, 2, 3, 4, 5]. Usamos reducir() para calcular el producto de todos los números, que devuelve un valor único de 120.
También usamos acumular() para calcular el producto de todos los números. Sin embargo, en lugar de devolver un valor único, acumular() devuelve un iterador que produce una secuencia de resultados intermedios: [1, 2, 6, 24, 120].
Entonces, la principal diferencia entre reducir() y acumular() es que reducir() devuelve un valor único que es el resultado final de la operación. Por el contrario, acumular() devuelve un iterador que produce una secuencia de resultados intermedios.