logo

редуцира() у Питхон-у

У Питхон-у, редукција() је уграђена функција која примењује дату функцију на елементе итерабле, сводећи их на једну вредност.

Синтакса за редукцију() је следећа:

 functools.reduce(function, iterable[, initializer]) 
  • Тхе аргумент функције је функција која узима два аргумента и враћа једну вредност. Први аргумент је акумулирана вредност, а други аргумент је тренутна вредност из итерабле.
  • Тхе итерабле аргумент је низ вредности које треба редуковати.
  • Опциони аргумент иницијализатора се користи да обезбеди почетну вредност за акумулирани резултат. Ако иницијализатор није наведен, први елемент итерабле се користи као почетна вредност.

Ево примера који показује како да користите редукцију() да бисте пронашли збир листе бројева:

мени за подешавања андроид телефона
 # 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}') 

Излаз:

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

У овом примеру користимо функцију редуцира () да применимо функцију додавања која враћа збир две вредности сваком пару елемената на листи бројева, што резултира збиром свих елемената.

Хајде да користимо ламбда функцију као први аргумент функције редуце():

јсон фајл
 # 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 

Хајде да разјаснимо како смањити() функција ради за дати пример:

Функција редуцира () узима два аргумента: функцију и итерабле. У овом случају користимо ламбда функцију ламбда к, и: к * и као функцију, а листу бројева као итерабле.

  • Ламбда функција прихвата променљиве к и и, множи их и враћа резултат. Када се ламбда функција иницијално покрене, променљиве к и и се постављају на први и други елемент, респективно, ми_лист (тј., к = 1 и и = 2). Ламбда функција множи ова два броја и враћа резултат (1 * 2 = 2).
  • Други пут када се позове ламбда функција, к се поставља на резултат претходног позива (к = 2), а и се поставља на трећи елемент листе бројева (тј. и = 3). Он множи ове две вредности и враћа резултат (2 * 3 = 6).
  • Ламбда функција се више пута позива на овај начин за сваки елемент у ми_лист док се сви елементи не обрађују. Функција редуцира() враћа производ свих елемената листе, који се затим додељује променљивој производа као 120. Овај производ се израчунава на следећи начин: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Коначно, штампамо вредност променљиве производа помоћу функције принт(), која даје 120.

редуцира() функција са операторским функцијама

Наш код можемо учинити сажетијим и лакшим за читање коришћењем операторских функција уместо ламбда функција.

Ево примера који показује употребу операторских функција као првог аргумента функције редукције:

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

Излаз:

 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 

Овај код показује како да користите функцију редуцира () и функције оператора за обављање математичких и стринг операција над итерабле у Питхон-у.

Разумевање разлике између функција редуцира () и акумулира ():

Питхон фунцтоолс модул обезбеђује функције редуцирати() и акумулирати(), које обе раде на итерабле на начине који су упоредиви.

јава веб сервиси
  1. Тхе смањити () и акумулирати () функције су сличне по томе што обе прихватају два аргумента: сам итерабле и функцију која описује операцију која ће се извршити на њој. Међутим, начин на који поступају са исходима операције је оно у чему се највише разликују један од другог.
  2. Тхе смањити () функција врши операцију на прва два елемента итерабле пре него што покрене исту операцију на резултату и следећем елементу. Овај процес се понавља све док се не обрађују сви елементи итерабле. Коначни излаз операције се враћа као један резултат.
  3. Док акумулирати () функција такође примењује операцију на прва два елемента итерабле пре него што изврши исту операцију на резултату и наредним елементима, акумулација() функција враћа итератор који садржи међурезултате операције. Другим речима, након што се обради сваки елемент, акумулирати () функција обезбеђује низ вредности које представљају исход операције.

Пример за разумевање разлике између акумулира () и редуцира ():

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

У овом примеру имамо листу бројева [1, 2, 3, 4, 5]. Користимо смањити() да израчуна производ свих бројева, који враћа једну вредност од 120.

Такође користимо акумулирати() да израчунамо производ свих бројева. Међутим, уместо враћања једне вредности, акумулирати() враћа итератор који даје низ међурезултата: [1, 2, 6, 24, 120].

Дакле, главна разлика између смањити() а акумулатор() је да редуцира() враћа једну вредност која је коначни излаз операције. Насупрот томе, цоллецте() враћа итератор који даје низ међурезултата.