Reduce python что это
Перейти к содержимому

Reduce python что это

  • автор:

Что делает метод reduce python?

reduce — это функция из встроенного модуля functools .

Сигнатура функции: reduce(function, iterable[, initializer]) .

Принимает функцию для двух аргументов, итерабельный объект и необязательный initializer — аккумулирующее значение (по умолчанию равен первому элементу iterable).

from functools import reduce reduce(lambda x, y: x + y, range(4), 3) # то же самое что (((3+1)+2)+3) # 9 def get_maximum(first_num, second_num): return first_num if first_num > second_num else second_num reduce(get_maximum, [2, 3, 5, 4, 1]) # 5 

Функция reduce() в Python

Функция reduce() модуля functools кумулятивно применяет функцию function к элементам итерируемой iterable последовательности, сводя её к единственному значению.

Аргумент function это функция которую требуется применить к элементам последовательности. Должна принимать два аргумента, где первый аргумент — аккумулированное ранее значение, а второй аргумент следующий элемент последовательности.

Аргумент iterable представляет собой последовательность, элементы которой требуется свести к единственному значению. Если последовательность пуста и не задан аргумент initializer , то возбуждается исключение TypeError .

Например reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) вычисляет ((((1 + 2) +3) +4) +5) . Левый аргумент x — это накопленное значение, а правый аргумент y — это следующий элемент iterable .

Если присутствует необязательный initializer , он помещается перед элементами iterable в вычислении. Другими словами это базовое значение, с которого требуется начать отсчёт. Аргумент initializer , так же служит значением по умолчанию, когда iterable является пустым.

Функция reduce() эквивалентна следующему коду:

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 
Примеры использования:

Вычисление суммы всех элементов списка при помощи reduce:

>>> from functools import reduce >>> items = [10, 20, 30, 40, 50] >>> sum_all = reduce(lambda x,y: x + y, items) >>> sum_all # 150 

Вычисление наибольшего элемента в списке при помощи reduce:

>>> from functools import reduce >>> items = [1, 24, 17, 14, 9, 32, 2] >>> all_max = reduce(lambda a,b: a if (a > b) else b, items) >>> all_max # 32 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Способы использования модуля functools
  • Декоратор @cached_property модуля functools
  • Функция cmp_to_key() модуля functools
  • Декоратор @cache() модуля functools, кеширующий декоратор
  • Декоратор @lru_cache() модуля functools
  • Декоратор @total_ordering модуля functools
  • Функция partial() модуля functools
  • Класс partialmethod() модуля functools
  • Функция reduce() модуля functools
  • Декоратор @singledispatch модуля functools
  • Декоратор @singledispatchmethod модуля functools
  • Декоратор @update_wrapper() модуля functools
  • Декоратор @wraps() модуля functools

reduce

func — Функция, которую требуется применить к элементам последовательности. Должна принимать два аргумента, где первый аргумент — аккумулированное ранее значение, а второй — следующий элемент последовательности.

iterable — Последовательность, элементы которой требуется свести к единственному значению. Если последовательность пуста и не задан initializer, то возбуждается TypeError.

initializer=None — Базовое значение, с которого требуется начать отсчёт. Оно же будет возвращено, если последовательность пуста.

 def reducer_func(el_prev, el): 
# el_prev - предшествующий элемент
# el - текущий элемент
return el_prev + el

# python 2
reduce(reducer_func, [1, 2, 3]) # 6

# python 3
from functools import reduce
reduce(reducer_func, [1, 2, 3]) # 6

На заметку

Python 3 Настоятельно рекомендуется использовать обычный проход по элементам при помощи for для повышения читаемости кода. Если функция всё же требуется, то её можно найти в functools.reduce().

Встроенные функции map, filter и reduce в Python

Python предоставляет множество встроенных (built-in) функций, которые предопределены и могут использоваться конечным пользователем, просто вызывая их. Эти функции не только облегчают работу программистов, но и создают стандартную среду программирования. В этой статье вы узнаете о трех таких впечатляющих функциях, как map(), filter() и reduce() в Python.

Что такое функции map(), filter() и reduce() в Python?

Как упоминалось ранее, map(), filter() и reduce() являются встроенными функциями Python. Эти функции обеспечивают функциональный программный аспект Python. В функциональном программировании передаваемые аргументы являются единственными факторами, которые определяют результат. Эти функции могут принимать любую другую функцию в качестве параметра и могут быть переданы другим функциям в качестве параметров.

Функция map():

Функция map() является типом высшего порядка. Как упоминалось ранее, эта функция принимает другую функцию в качестве параметра вместе с итерируемой последовательностью и возвращает выходные данные после применения функции на каждый итерируемый элемент из последовательности. Синтаксис выглядит следующим образом:

map(function, iterables)

Здесь функция определяет выражение, которое в свою очередь применяется к итерируемым элементам. Функция map может принимать функции, которые определил сам пользователь, а также лямбда-функции в качестве параметра.

Совместное использование с функциями, определяемыми пользователем и Lambda-функциями:

Пользовательские функции совместно с map():

Функция map() может принимать пользовательские функции в качестве параметров. Параметры этих функций устанавливаются исключительно пользователем или программистом.

def newfunc(a): return a*a x = map(newfunc, (1,2,3,4)) # x - это объект типа map print(x) print(set(x))
 [1, 4, 9, 16]

Вы также можете передать несколько списков в качестве параметров.

def func(a, b): return a + b a = map(func, [2, 4, 5], [1,2,3]) print(a) print(tuple(a))
 (3, 6, 8)

Теперь давайте посмотрим, как вы можете использовать lambda-функции внутри map().

Lambda-функции совместно с map():

Lambda-функции — это функции, которые являются анонимными и им не нужно указывать какое-то собственное имя, как это происходит с пользовательскими функциями. Эти функции часто передаются в качестве параметров другим функциям.
Теперь давайте попробуем применить lambda-функции совместно с функцией map(). Рассмотрим следующий пример:

tup = (5, 7, 22, 97, 54, 62, 77, 23, 73, 61) newtuple = tuple(map(lambda x: x+3 , tup)) print(newtuple)
(8, 10, 25, 100, 57, 65, 80, 26, 76, 64)

Приведенный выше вывод является результатом применения lambda-выражения (x + 3) к каждому элементу, присутствующему в кортеже.

Функция filter():

Функция filter() используется для создания списка, состоящего из значений, для которых функция возвращает true. Синтаксис этого следующий:

filter(function, iterables)

Так же, как и map(), эта функция может использовать в качестве параметра пользовательские функции, а также lambda-функции.

def func(x): if x>=3: return x y = filter(func, (1,2,3,4)) print(y) print(list(y))

Как видите, y — это объект типа функции filter, а выходной список — это список значений, которые являются истинными для условия (x>=3).

Использование lambda-функций совместно с filter():

Lambda-функция, которая используется в качестве параметра, фактически определяет условие, которое необходимо проверить.

y = filter(lambda x: (x>=3), (1,2,3,4)) print(list(y))

Приведенный выше код выдает тот же результат, что и предыдущая функция.

Функция reduce():

Функция reduce(), как можно понять из названия, применяет переданную функцию к итерируемому объекту и возвращает одно значение.

reduce(function, iterables)

Здесь функция определяет, какое выражение необходимо применить к итерируемому объекту. Эту функцию необходимо импортировать из модуля functools.

from functools import reduce reduce(lambda a, b: a + b, [23, 21, 45, 98])

В приведенном выше примере функция reduce последовательно суммирует каждый элемент из списка и возвращает одно выходное значение.

Функции map(), filter() и reduce() в Python могут использоваться вместе друг с другом.

Совместное использование функций map(), filter() и reduce() functions:

Когда вы совместно друг с другом используете функции, то сначала исполняются внутренние функции, а затем внешние функции обрабатывают результат выполнения внутренних функций.

c = map(lambda x:x+x,filter(lambda x: (x>=3), (1,2,3,4))) print(list(c))

Если вы отфильтруете целые числа, большие или равные 3, из данного кортежа, вы получите [3,4] в результате. Затем, если вы примените функцию map к результату вывода предыдущей функции с использованием условия (x + x), то вы получите [6,8] список, который является выходным.

Использование map() внутри filter():

Когда вы используете функцию map() внутри функции filter(), итерации сначала обрабатываются функцией map, а затем к ним применяется условие filter().

c = filter(lambda x: (x>=3),map(lambda x:x+x, (1,2,3,4))) print(list(c))
[4, 6, 8]

Использование map() и filter() внутри reduce():

Вывод внутренних функций обрабатывается в соответствии с условием, заданным для функции reduce().

d = reduce(lambda x,y: x+y,map(lambda x:x+x,filter(lambda x: (x>=3), (1,2,3,4)))) print(d)

Результатом и выходными данными внутренних функций map() и reduce() является [6,8].

Итак, можно подводить итоги статьи по функциям map(), filter() и reduce() в Python. Я надеюсь, что вы все ясно поняли. Постарайтесь как можно больше практиковаться и применять полученные знания на практике.

Остались какие-то вопросы по теме? Пожалуйста, напишите их в разделе комментариев этой статьи, и мы дадим вам ответ как можно скорее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *