logo

Samazināt () Python

Programmā Python reduction() ir iebūvēta funkcija, kas piemēro doto funkciju iterable elementiem, samazinot tos līdz vienai vērtībai.

Reducēšanas () sintakse ir šāda:

 functools.reduce(function, iterable[, initializer]) 
  • The funkcijas arguments ir funkcija, kas izmanto divus argumentus un atgriež vienu vērtību. Pirmais arguments ir uzkrātā vērtība, bet otrais arguments ir iterējamā pašreizējā vērtība.
  • The atkārtojams arguments ir samazināmo vērtību secība.
  • Neobligātais inicializācijas arguments tiek izmantots, lai nodrošinātu uzkrātā rezultāta sākotnējo vērtību. Ja inicializators nav norādīts, kā sākotnējā vērtība tiek izmantots iterable pirmais elements.

Šeit ir piemērs, kas parāda, kā izmantot reduktoru(), lai atrastu skaitļu saraksta summu:

vesels skaitlis, salīdzinot ar java
 # 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}') 

Izvade:

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

Šajā piemērā mēs izmantojam funkciju samazināt(), lai lietotu pievienošanas funkciju, kas atgriež divu vērtību summu katram elementu pārim skaitļu sarakstā, kā rezultātā tiek iegūta visu elementu summa.

Izmantosim lambda funkciju kā redukcijas () funkcijas pirmo argumentu:

operatori python programmēšanā
 # 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 

Sadalīsim, kā samazināt () funkcija darbojas dotajā piemērā:

Funkcijai samazināt () ir divi argumenti: funkcija un iterējama. Šajā gadījumā mēs izmantojam lambda funkciju lambda x, y: x * y kā funkciju un skaitļu sarakstu kā atkārtojamu.

  • Lambda funkcija pieņem mainīgos x un y, reizina tos un atgriež rezultātu. Sākotnēji palaižot lambda funkciju, mainīgie x un y tiek iestatīti attiecīgi uz my_list pirmo un otro elementu (t.i., x = 1 un y = 2). Lambda funkcija reizina šos divus skaitļus un atgriež rezultātu (1 * 2 = 2).
  • Otro reizi izsaucot lambda funkciju, x tiek iestatīts uz iepriekšējā izsaukuma rezultātu (x = 2), bet y tiek iestatīts uz trešo skaitļu saraksta elementu (t.i., y = 3). Tas reizina šīs divas vērtības un atgriež rezultātu (2 * 3 = 6).
  • Lambda funkcija tiek atkārtoti izsaukta šādā veidā katram my_list elementam, līdz visi elementi ir apstrādāti. Funkcija samazināt() atgriež visu saraksta elementu reizinājumu, kas pēc tam tiek piešķirts produkta mainīgajam kā 120. Šo reizinājumu aprēķina šādi: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Visbeidzot, mēs izdrukājam produkta mainīgā vērtību, izmantojot funkciju print(), kas izvada 120.

samazināt() funkcija ar operatora funkcijām

Mēs varam padarīt mūsu kodu kodolīgāku un vieglāk lasāmu, izmantojot operatora funkcijas, nevis lambda funkcijas.

Šeit ir piemērs, lai parādītu operatora funkciju izmantošanu kā pirmo samazināšanas funkcijas argumentu:

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

Izvade:

 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 

Šis kods parāda, kā izmantot redukcijas () funkciju un operatora funkcijas, lai Python veiktu matemātiskās un virkņu darbības iterables.

Izpratne par atšķirību starp samazinājuma () un uzkrāšanas () funkcijām:

Python functools modulis nodrošina funkcijas samazināt () un uzkrāšanu (), kuras abas darbojas iterējamos veidos, kas ir salīdzināmi.

hrithik roshan
  1. The samazināt () un uzkrāties () funkcijas ir līdzīgas ar to, ka tās abas pieņem divus argumentus: pašu iterable un funkciju, kas apraksta ar to veicamo darbību. Tomēr veids, kā viņi apstrādā operācijas rezultātus, ir visvairāk atšķirīgs viens no otra.
  2. The samazināt Funkcija () veic darbību ar iterējamā pirmajiem diviem elementiem, pirms tā palaiž to pašu darbību rezultātam un nākamajam elementam. Šo procesu atkārto, līdz ir apstrādāti visi iterējamā elementi. Operācijas galīgā izvade tiek atgriezta kā viens rezultāts.
  3. Kamēr uzkrāties Funkcija () arī piemēro operāciju iterējamā pirmajiem diviem elementiem pirms vienas un tās pašas darbības veikšanas rezultātam un nākamajiem elementiem, funkcija akumul() atgriež iteratoru, kas satur darbības starprezultātus. Citiem vārdiem sakot, pēc katra elementa apstrādes, uzkrāties () funkcija nodrošina virkni vērtību, kas atspoguļo darbības rezultātu.

Piemērs, lai saprastu atšķirību starp uzkrāšanu () un samazināšanu ():

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

Šajā piemērā mums ir skaitļu saraksts [1, 2, 3, 4, 5]. Mēs izmantojam samazināt () lai aprēķinātu visu skaitļu reizinājumu, kas atgriež vienu vērtību 120.

Mēs arī lietojam uzkrāt () lai aprēķinātu visu skaitļu reizinājumu. Tomēr tā vietā, lai atgrieztu vienu vērtību, uzkrāt () atgriež iteratoru, kas dod starprezultātu secību: [1, 2, 6, 24, 120].

Tātad, galvenā atšķirība starp samazināt () un uzkrāt() ir tas, ka reduction() atgriež vienu vērtību, kas ir operācijas galīgā izvade. Turpretim uzkrāšana() atgriež iteratoru, kas nodrošina starprezultātu secību.