В Python, reduce() е вградена функция, която прилага дадена функция към елементите на итерируем, като ги редуцира до една стойност.
Синтаксисът за reduce() е както следва:
functools.reduce(function, iterable[, initializer])
- The аргумент на функцията е функция, която приема два аргумента и връща една стойност. Първият аргумент е натрупаната стойност, а вторият аргумент е текущата стойност от итерируемия.
- The итерируем аргумент е последователността от стойности, които трябва да бъдат намалени.
- Незадължителният аргумент за инициализиране се използва за предоставяне на начална стойност за натрупания резултат. Ако не е указан инициализатор, първият елемент на итерируемия се използва като начална стойност.
Ето един пример, който демонстрира как да използвате reduce(), за да намерите сумата на списък от числа:
# 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
В този пример използваме функцията reduce(), за да приложим функция add, която връща сумата от две стойности към всяка двойка елементи в списъка с числа, което води до сумата от всички елементи.
байтове към низ python
Нека използваме ламбда функцията като първи аргумент на функцията reduce():
# 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
Нека да разберем как намали () функцията работи за дадения пример:
Функцията reduce() приема два аргумента: функция и итерируем. В този случай използваме ламбда функция lambda x, y: x * y като функция, а списъкът с числа като итерируем.
- Функцията ламбда приема променливите x и y, умножава ги и връща резултата. Когато ламбда функцията се изпълнява първоначално, променливите x и y се задават съответно на първия и втория елемент на my_list (т.е. x = 1 и y = 2). Функцията ламбда умножава тези две числа и връща резултата (1 * 2 = 2).
- При второто извикване на ламбда функцията x се задава на резултата от предишното извикване (x = 2), а y се задава на третия елемент от списъка с числа (т.е. y = 3). Той умножава тези две стойности и връща резултата (2 * 3 = 6).
- Функцията ламбда се извиква многократно по този начин за всеки елемент в my_list, докато не бъдат обработени всички елементи. Функцията reduce() връща произведението на всички елементи на списъка, което след това се присвоява на продуктовата променлива като 120. Този продукт се изчислява по следния начин: ((((1 * 2) * 3)* 4)* 5) = 120.
- Накрая отпечатваме стойността на променливата продукт с помощта на функцията print(), която извежда 120.
функция reduce() с операторни функции
Можем да направим нашия код по-сбит и по-лесен за четене, като използваме операторни функции вместо ламбда функции.
Ето пример за демонстриране на използването на операторни функции като първи аргумент на функцията за намаляване:
# 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
Този код показва как да използвате функцията reduce() и операторните функции за извършване на математически и низови операции върху итерируеми елементи в Python.
git състояние
Разбиране на разликата между функциите за намаляване() и затрупване():
Модулът functools на Python предоставя функциите reduce() и collecte(), като и двете работят върху итерируеми по начини, които са сравними.
- The намалявам () и натрупвам () функциите са сходни по това, че и двете приемат два аргумента: самия итерируем и функция, която описва операцията, която трябва да бъде извършена върху него. Начинът, по който се справят с резултатите от операцията обаче, е мястото, където те се различават най-много един от друг.
- The намалявам () изпълнява операцията върху първите два елемента на итерируемия, преди да изпълни същата операция върху резултата и следващия елемент. Този процес се повтаря, докато не бъдат обработени всички итерируеми елементи. Крайният резултат от операцията се връща като един резултат.
- Докато натрупват се () функцията също така прилага операцията към първите два елемента на iterable, преди да изпълни същата операция върху резултата и следващите елементи, функцията collecte() връща итератор, съдържащ междинните резултати на операцията. С други думи, след като всеки елемент е бил обработен, the натрупват се () предоставя поредица от стойности, представящи резултата от операцията.
Пример за разбиране на разликата между натрупване() и намаляване():
# 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].
И така, основната разлика между намали () и collect() е, че reduce() връща една стойност, която е крайният резултат от операцията. За разлика от това,кумулиране() връща итератор, който дава поредица от междинни резултати.