logo

smanji() u Pythonu

U Pythonu, reduce() je ugrađena funkcija koja primjenjuje danu funkciju na elemente iterable, svodeći ih na jednu vrijednost.

Sintaksa za reduce() je sljedeća:

 functools.reduce(function, iterable[, initializer]) 
  • The argument funkcije je funkcija koja uzima dva argumenta i vraća jednu vrijednost. Prvi argument je akumulirana vrijednost, a drugi argument je trenutna vrijednost iz iterabla.
  • The iterable argument je niz vrijednosti koje treba smanjiti.
  • Neobavezni argument inicijalizatora koristi se za pružanje početne vrijednosti za akumulirani rezultat. Ako inicijalizator nije naveden, prvi element iterable se koristi kao početna vrijednost.

Evo primjera koji pokazuje kako koristiti reduce() za pronalaženje zbroja popisa brojeva:

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

Izlaz:

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

U ovom primjeru koristimo funkciju reduce() za primjenu funkcije dodavanja koja vraća zbroj dviju vrijednosti za svaki par elemenata na popisu brojeva, što rezultira zbrojem svih elemenata.

Upotrijebimo lambda funkciju kao prvi argument funkcije reduce():

java usporedba
 # 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 

Razjasnimo kako smanjiti() funkcija radi za navedeni primjer:

Funkcija reduce() uzima dva argumenta: funkciju i iterable. U ovom slučaju koristimo lambda funkciju lambda x, y: x * y kao funkciju, a popis brojeva kao iterable.

  • Lambda funkcija prihvaća varijable x i y, množi ih i vraća rezultat. Kada se lambda funkcija inicijalno pokrene, varijable x i y postavljaju se na prvi, odnosno drugi element my_list (tj. x = 1 i y = 2). Lambda funkcija množi ova dva broja i vraća rezultat (1 * 2 = 2).
  • Drugi put kada se lambda funkcija pozove, x se postavlja na rezultat prethodnog poziva (x = 2), a y se postavlja na treći element popisa brojeva (tj., y = 3). Množi ove dvije vrijednosti i vraća rezultat (2 * 3 = 6).
  • Lambda funkcija se više puta poziva na ovaj način za svaki element u my_list dok se ne obrade svi elementi. Funkcija reduce() vraća umnožak svih elemenata popisa, koji se zatim dodjeljuje varijabli proizvoda kao 120. Taj se umnožak izračunava na sljedeći način: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Na kraju, ispisujemo vrijednost varijable proizvoda pomoću funkcije print(), koja ispisuje 120.

reduciraj() funkciju s operatorskim funkcijama

Naš kod možemo učiniti sažetijim i lakšim za čitanje korištenjem operatorskih funkcija umjesto lambda funkcija.

Evo primjera za demonstraciju upotrebe operatorskih funkcija kao prvog argumenta funkcije reduciranja:

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

Izlaz:

 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 

Ovaj kod pokazuje kako koristiti funkciju reduce() i operatorske funkcije za izvođenje matematičkih i string operacija na iterables u Pythonu.

Razumijevanje razlika između funkcija reduciranja() i skupljanja():

Modul Python functools pruža funkcije reduce() i collecte(), od kojih obje djeluju na iterable na usporedive načine.

cjelobrojna dvostruka java
  1. The smanjiti () i akumulirati () funkcije su slične po tome što obje prihvaćaju dva argumenta: sam iterable i funkciju koja opisuje operaciju koja se na njemu treba izvesti. Međutim, način na koji postupaju s ishodima operacije je ono gdje se međusobno najviše razlikuju.
  2. The smanjiti () funkcija izvršava operaciju na prva dva elementa iterabla prije pokretanja iste operacije na rezultatu i sljedećem elementu. Ovaj proces se ponavlja dok se svi elementi iterabla ne obrade. Konačni izlaz operacije vraća se kao jedan rezultat.
  3. Dok akumulirati () također primjenjuje operaciju na prva dva elementa iterabla prije izvođenja iste operacije na rezultatu i sljedećim elementima, akumulativna() funkcija vraća iterator koji sadrži međurezultate operacije. Drugim riječima, nakon obrade svakog elementa, akumulirati () funkcija daje niz vrijednosti koje predstavljaju rezultat operacije.

Primjer za razumijevanje razlike između akumulirati() i reducirati():

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

U ovom primjeru imamo popis brojeva [1, 2, 3, 4, 5]. Koristimo smanjiti() za izračun umnoška svih brojeva, koji vraća jednu vrijednost 120.

Također koristimo akumulirati() izračunati umnožak svih brojeva. Međutim, umjesto vraćanja jedne vrijednosti, akumulirati() vraća iterator koji daje niz međurezultata: [1, 2, 6, 24, 120].

Dakle, glavna razlika između smanjiti() a collectute() je da reduce() vraća jednu vrijednost koja je konačni izlaz operacije. Suprotno tome, collecte() vraća iterator koji daje niz međurezultata.