logo

reduce() i Python

I Python er reduce() en indbygget funktion, der anvender en given funktion på elementerne i en iterabel, hvilket reducerer dem til en enkelt værdi.

kalder js-funktionen fra html

Syntaksen for reduce() er som følger:

 functools.reduce(function, iterable[, initializer]) 
  • Det funktionsargument er en funktion, der tager to argumenter og returnerer en enkelt værdi. Det første argument er den akkumulerede værdi, og det andet argument er den aktuelle værdi fra den iterable.
  • Det iterable argument er rækkefølgen af ​​værdier, der skal reduceres.
  • Det valgfri initialiseringsargument bruges til at give en startværdi for det akkumulerede resultat. Hvis der ikke er angivet nogen initializer, bruges det første element i iterablen som startværdi.

Her er et eksempel, der viser, hvordan man bruger reduce() til at finde summen af ​​en liste med tal:

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

Produktion:

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

I dette eksempel bruger vi reduce()-funktionen til at anvende en add-funktion, der returnerer summen af ​​to værdier til hvert par af elementer i tallisten, hvilket resulterer i summen af ​​alle elementerne.

Lad os bruge lambda-funktionen som det første argument for reduce()-funktionen:

 # 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 

Lad os nedbryde, hvordan reducere() funktion fungerer for det angivne eksempel:

Funktionen reduce() tager to argumenter: en funktion og en iterabel. I dette tilfælde bruger vi en lambda-funktion lambda x, y: x * y som funktion, og tallisten som iterable.

  • Lambdafunktionen accepterer variablerne x og y, multiplicerer dem og returnerer resultatet. Når lambda-funktionen først køres, sættes variablerne x og y til henholdsvis det første og andet element i my_list (dvs. x = 1 og y = 2). Lambda-funktionen multiplicerer disse to tal og returnerer resultatet (1 * 2 = 2).
  • Anden gang lambda-funktionen kaldes, sættes x til resultatet af det forrige opkald (x = 2), og y sættes til det tredje element i tallisten (dvs. y = 3). Det multiplicerer disse to værdier og returnerer resultatet (2 * 3 = 6).
  • Lambda-funktionen kaldes gentagne gange på denne måde for hvert element i min_listen, indtil alle elementer er blevet håndteret. Funktionen reduce() returnerer produktet af alle listens elementer, som derefter tildeles produktvariablen som 120. Dette produkt beregnes som følger: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Til sidst udskriver vi værdien af ​​produktvariablen ved hjælp af print()-funktionen, som udsender 120.

reduce() funktion med operatorfunktioner

Vi kan gøre vores kode mere kortfattet og lettere at læse ved at bruge operatørfunktioner i stedet for lambda-funktioner.

Her er et eksempel for at demonstrere brugen af ​​operatorfunktioner som det første argument for reduceringsfunktionen:

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

Produktion:

 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 

Denne kode viser, hvordan man bruger reduce()-funktion og operatorfunktioner til at udføre matematiske og strengoperationer på iterables i Python.

java tutorials

Forstå forskellen mellem reduce() og accumulate() funktioner:

Python functools-modulet giver funktionerne reduce() og accumulate(), som begge fungerer på iterables på måder, der er sammenlignelige.

  1. Det reducere () og ophobe ()-funktioner ligner hinanden, idet de begge accepterer to argumenter: selve den iterable og en funktion, der beskriver den operation, der skal udføres på den. Den måde, de håndterer operationens resultater på, er dog der, hvor de afviger mest fra hinanden.
  2. Det reducere ()-funktionen udfører operationen på iterablens første to elementer, før den kører den samme operation på resultatet og det næste element. Denne proces gentages, indtil alle iterablens elementer er blevet behandlet. Operationens endelige output returneres som et enkelt resultat.
  3. Mens ophobe ()-funktionen anvender også operationen på iterablens første to elementer, før den samme operation udføres på resultatet og efterfølgende elementer, funktionen accumulate() returnerer en iterator, der indeholder operationens mellemresultater. Med andre ord, efter at hvert element er blevet håndteret, vil den ophobe () funktion giver en række værdier, der repræsenterer operationens resultat.

Et eksempel til at forstå forskellen mellem akkumulere() og reducere():

 # 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] 

I dette eksempel har vi en liste med tal [1, 2, 3, 4, 5]. Vi bruger reducere() for at beregne produktet af alle tallene, hvilket returnerer en enkelt værdi på 120.

Vi bruger også ophobe() at beregne produktet af alle tallene. Men i stedet for at returnere en enkelt værdi, ophobe() returnerer en iterator, der giver en sekvens af mellemresultater: [1, 2, 6, 24, 120].

Så den største forskel mellem reducere() og akkumulere() er, at reduce() returnerer en enkelt værdi, der er det endelige output af operationen. I modsætning hertil returnerer accumulate() en iterator, der giver en sekvens af mellemresultater.