logo

sumažinti () Python

Python, reduktorius () yra integruota funkcija, kuri taiko nurodytą funkciją kartojimo elementams, sumažindama juos iki vienos reikšmės.

Reduction() sintaksė yra tokia:

 functools.reduce(function, iterable[, initializer]) 
  • The funkcijos argumentas yra funkcija, kuri paima du argumentus ir grąžina vieną reikšmę. Pirmasis argumentas yra sukaupta vertė, o antrasis argumentas yra dabartinė vertė iš kartojimo.
  • The kartojamas argumentas yra reikšmių seka, kurią reikia sumažinti.
  • Pasirenkamas inicijavimo argumentas naudojamas norint pateikti pradinę sukaupto rezultato vertę. Jei iniciatorius nenurodytas, pirmasis iteravimo elementas naudojamas kaip pradinė reikšmė.

Štai pavyzdys, kuriame parodyta, kaip naudoti redukcijos () skaičių, kad būtų galima rasti skaičių sąrašo sumą:

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

Išvestis:

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

Šiame pavyzdyje mes naudojame funkciją reduktorius () norėdami taikyti pridėjimo funkciją, kuri kiekvienai skaičių sąrašo elementų porai grąžina dviejų reikšmių sumą, todėl gaunama visų elementų suma.

Naudokime lambda funkciją kaip pirmąjį redukcijos () funkcijos argumentą:

 # 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 

Išskirkime, kaip sumažinti () funkcija veikia pateiktame pavyzdyje:

eilutė į tarpt

Funkcijai reduktorius () turi du argumentus: funkciją ir kartojamą. Šiuo atveju kaip funkciją naudojame lambda funkciją lambda x, y: x * y, o skaičių sąrašą kaip pakartojamą.

  • Lambda funkcija priima kintamuosius x ir y, juos padaugina ir grąžina rezultatą. Kai iš pradžių paleidžiama lambda funkcija, kintamieji x ir y atitinkamai nustatomi į pirmąjį ir antrąjį my_list elementus (t. y. x = 1 ir y = 2). Funkcija lambda padaugina šiuos du skaičius ir grąžina rezultatą (1 * 2 = 2).
  • Antrą kartą iškvietus lambda funkciją, x nustatomas kaip ankstesnio skambučio rezultatas (x = 2), o y nustatomas kaip trečiasis skaičių sąrašo elementas (t. y. y = 3). Jis padaugina šias dvi reikšmes ir pateikia rezultatą (2 * 3 = 6).
  • Funkcija lambda tokiu būdu pakartotinai iškviečiama kiekvienam my_list elementui, kol bus apdoroti visi elementai. Funkcija redukcijos () grąžina visų sąrašo elementų sandaugą, kuri vėliau priskiriama produkto kintamajam kaip 120. Šis produktas apskaičiuojamas taip: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Galiausiai atspausdiname produkto kintamojo reikšmę naudodami funkciją print(), kuri išveda 120.

Reduction() funkcija su operatoriaus funkcijomis

Mes galime padaryti savo kodą glaustesnį ir lengviau skaitomą naudodami operatoriaus funkcijas, o ne lambda funkcijas.

Štai pavyzdys, rodantis operatoriaus funkcijų naudojimą kaip pirmąjį mažinimo funkcijos argumentą:

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

Išvestis:

 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 kodas parodo, kaip naudoti redukcijos () ir operatorių funkcijas, kad būtų galima atlikti matematines ir eilučių operacijas su kartojamomis Python.

masyvai java

Suprasti skirtumą tarp mažinimo () ir kaupimo () funkcijų:

Python functools modulyje pateikiamos funkcijos 'reduction()' ir 'akumuli'(), kurios abi veikia kartojamaisiais būdais, kurie yra palyginami.

  1. The sumažinti () ir kaupti () funkcijos yra panašios tuo, kad abi priima du argumentus: pačią iteraciją ir funkciją, apibūdinančią su ja atliekamą operaciją. Tačiau tai, kaip jie elgiasi su operacijos rezultatais, labiausiai skiriasi vienas nuo kito.
  2. The sumažinti Funkcija () atlieka operaciją su pirmaisiais dviem kartotinamojo elemento elementais, prieš paleidžiant tą pačią operaciją su rezultatu ir kitu elementu. Šis procesas kartojamas tol, kol bus apdoroti visi iteracijos elementai. Galutinė operacijos išvestis grąžinama kaip vienas rezultatas.
  3. Kol kaupti Funkcija () taip pat taiko operaciją pirmiesiems dviem kartotinės elementams prieš atlikdama tą pačią operaciją su rezultatu ir vėlesniais elementais, funkcija „akumuli“ () grąžina iteratorių, kuriame yra tarpiniai operacijos rezultatai. Kitaip tariant, apdorojus kiekvieną elementą, kaupti () funkcija pateikia reikšmių, atspindinčių operacijos rezultatą, seriją.

Pavyzdys, kaip suprasti skirtumą tarp akumuliavimo () ir redukcijos ():

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

Šiame pavyzdyje turime skaičių [1, 2, 3, 4, 5] sąrašą. Mes naudojame sumažinti () apskaičiuoti visų skaičių sandaugą, kuri grąžina vieną reikšmę 120.

Mes taip pat naudojame kaupti() visų skaičių sandaugai apskaičiuoti. Tačiau užuot grąžinus vieną reikšmę, kaupti() grąžina iteratorių, kuris duoda tarpinių rezultatų seką: [1, 2, 6, 24, 120].

Taigi, pagrindinis skirtumas tarp sumažinti () ir kaup() reiškia, kad redukcija() grąžina vieną reikšmę, kuri yra galutinis operacijos rezultatas. Priešingai, kaup() grąžina iteratorių, kuris duoda tarpinių rezultatų seką.