logo

reduce() a Python

A Python, reduce() és una funció integrada que aplica una funció donada als elements d'un iterable, reduint-los a un sol valor.

La sintaxi de reduce() és la següent:

 functools.reduce(function, iterable[, initializer]) 
  • El argument de la funció és una funció que pren dos arguments i retorna un sol valor. El primer argument és el valor acumulat i el segon argument és el valor actual de l'iterable.
  • El iterable argument és la seqüència de valors que cal reduir.
  • L'argument inicialitzador opcional s'utilitza per proporcionar un valor inicial per al resultat acumulat. Si no s'especifica cap inicialitzador, el primer element de l'iterable s'utilitza com a valor inicial.

Aquí teniu un exemple que demostra com utilitzar reduce() per trobar la suma d'una llista de nombres:

dormir en js
 # 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}') 

Sortida:

 Sum of the integers of num_list : 55 Sum of the integers of num_list with initial value 10 : 65 

En aquest exemple, utilitzem la funció reduce() per aplicar una funció de suma que retorna la suma de dos valors a cada parell d'elements de la llista de números, donant com a resultat la suma de tots els elements.

Utilitzem la funció lambda com a primer argument de la funció reduce():

llista enllaçada java
 # 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 

Anem a desglossar com reduir () La funció funciona per a l'exemple donat:

La funció reduce() pren dos arguments: una funció i un iterable. En aquest cas, utilitzem una funció lambda lambda x, y: x * y com a funció i la llista de números com a iterable.

  • La funció lambda accepta les variables x i y, les multiplica i retorna el resultat. Quan la funció lambda s'executa inicialment, les variables x i y s'estableixen al primer i segon element, respectivament, de la meva_lista (és a dir, x = 1 i y = 2). La funció lambda multiplica aquests dos nombres i retorna el resultat (1 * 2 = 2).
  • La segona vegada que es crida la funció lambda, x s'estableix al resultat de la trucada anterior (x = 2) i y s'estableix al tercer element de la llista de números (és a dir, y = 3). Multiplica aquests dos valors i retorna el resultat (2 * 3 = 6).
  • La funció lambda es crida repetidament d'aquesta manera per a cada element de la meva_lista fins que s'han gestionat tots els elements. La funció reduce() retorna el producte de tots els elements de la llista, que després s'assigna a la variable de producte com a 120. Aquest producte es calcula de la següent manera: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Finalment, imprimim el valor de la variable de producte mitjançant la funció print(), que dóna 120.

funció reduce() amb funcions d'operador

Podem fer que el nostre codi sigui més concís i més fàcil de llegir utilitzant funcions d'operador en lloc de funcions lambda.

Aquí teniu un exemple per demostrar l'ús de les funcions d'operador com a primer argument de la funció de reducció:

 # 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}') 

Sortida:

 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 

Aquest codi mostra com utilitzar la funció reduce() i les funcions d'operador per realitzar operacions matemàtiques i de cadena en iterables en Python.

Comprendre la diferència entre les funcions reduir() i acumular():

El mòdul de functools de Python proporciona les funcions reduce() i accumulate(), ambdues que operen en iterables de maneres comparables.

fer mentre estàs en java
  1. El reduir () i acumular Les funcions () són similars perquè totes dues accepten dos arguments: el propi iterable i una funció que descriu l'operació que s'hi ha de dur a terme. La forma en què gestionen els resultats de l'operació, però, és on divergeixen més els uns dels altres.
  2. El reduir La funció () fa l'operació sobre els dos primers elements de l'iterable abans d'executar la mateixa operació sobre el resultat i el següent element. Aquest procés es repeteix fins que s'han processat tots els elements de l'iterable. La sortida final de l'operació es retorna com a resultat únic.
  3. Mentre que acumular () també aplica l'operació als dos primers elements de l'iterable abans de realitzar la mateixa operació sobre el resultat i els elements posteriors, la funció accumulate() retorna un iterador que conté els resultats intermedis de l'operació. En altres paraules, després de manipular cada element, el acumular La funció () proporciona una sèrie de valors que representen el resultat de l'operació.

Un exemple per entendre la diferència entre accumulate() i reduce():

 # 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 aquest exemple, tenim una llista de nombres [1, 2, 3, 4, 5]. Fem servir reduir () per calcular el producte de tots els nombres, que retorna un únic valor de 120.

També fem servir acumular () per calcular el producte de tots els nombres. Tanmateix, en lloc de retornar un sol valor, acumular () retorna un iterador que produeix una seqüència de resultats intermedis: [1, 2, 6, 24, 120].

Per tant, la diferència principal entre reduir () i accumulate() és que reduce() retorna un únic valor que és la sortida final de l'operació. En canvi, accumulate() retorna un iterador que produeix una seqüència de resultats intermedis.