Функция Python functools.reduce() используется для применения определенной функции, переданной в ее аргументе, ко всем элементам списка, заданным в последовательности.
Синтаксис
|
1 |
functools.reduce(function, iterable[, initializer]) |
Параметры
Функция reduce() принимает два обязательных параметра и один необязательный аргумент.
- function: она будет принимать два значения из итерации и генерировать временный результат.
- iterable: это список, словарь, кортеж или другие итерируемые объекты.
- initializer: это начальное значение, которое может быть обработано в функции.
Пример 1: как использовать функцию reduce() в Python
|
1 2 3 4 5 6 7 8 9 10 11 12 |
from functools import reduce numbers = [11, 19, 21, 18, 46] def addition(x, y): result = x + y return result print(reduce(addition, numbers)) |
Выход
|
1 |
115 |
Вы можете видеть, что список чисел сводится к одному значению, которое представляет собой сложение всех элементов списка.
Когда вы вызываете функцию reduce(), передавая функцию add() и числа в качестве аргументов, вы получаете вывод, который показывает все вычисления, которые выполняет метод reduce(), чтобы уменьшить его до единственного значения 115. В этом случае операции эквивалентны(((((0 + 11) + 19) + 21) + 18) + 46) = 115.
Пример 2: использование функции reduce() с операторными функциями
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import functools import operator lis = [11, 18, 19, 46, 21] print("The sum of the list elements is : ", end="") print(functools.reduce(operator.add, lis)) print("The product of list elements is : ", end="") print(functools.reduce(operator.mul, lis)) print("The concatenated product is : ", end="") print(functools.reduce(operator.add, ["bart", "simpson", "is", "great"])) |
Выход
|
1 2 3 4 |
The sum of the list elements is : 115 The product of list elements is : 3634092 The concatenated product is : bartsimpsonisgreat |
Пример 3: функция reduce() с тремя параметрами
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
def reduce(function, iterable, initializer=None): it = iter(iterable) if initializer is None: value = next(it) else: value = initializer for element in it: value = function(value, element) return value data =(21, 11, 0, 19, 18, 0, 46, 22) print(reduce(lambda a, b: a+b, data, 11)) |
Выход
|
1 |
148 |
Пример 4: reduce() или accumulate()
Основное различие между функциями functools.reduce() и itertools.accumulate() заключается в том, что функция reduce() сохраняет промежуточный результат и возвращает только итоговое значение суммирования. В то время как accumulate() возвращает итератор, содержащий промежуточные результаты. Последнее число возвращаемого итератора является суммирующим значением списка.
|
1 2 3 4 5 6 7 8 9 10 11 |
import functools import itertools lis = [11, 18, 19, 46, 21] print("The sum of list using accumulate() function is : ", end="") print(list(itertools.accumulate(lis, lambda x, y: x+y))) print("The sum of list using reduce() function is : ", end="") print(functools.reduce(lambda x, y: x+y, lis)) |
Выход
|
1 2 |
The sum of list using accumulate() function is : [11, 29, 48, 94, 115] The sum of list using reduce() function is : 115 |
