reduce() у Python

The зменшити (весело, послідовність) функція використовується для застосувати певну функцію, передану в її аргументі, до всіх елементів списку згадується в переданій послідовності. Ця функція визначена в functools модуль.

Працює:

  • На першому кроці вибираються перші два елементи послідовності та отримується результат.
  • Наступним кроком є ​​застосування тієї самої функції до попередньо отриманого результату та числа, що стоїть після другого елемента, і результат знову зберігається.
  • Цей процес триває, доки в контейнері не залишиться елементів.
  • Остаточний повернутий результат повертається та друкується на консолі.

Python3




# python code to demonstrate working of reduce()> > # importing functools for reduce()> import> functools> > # initializing list> lis> => [> 1> ,> 3> ,> 5> ,> 6> ,> 2> ]> > # using reduce to compute sum of list> print> (> 'The sum of the list elements is : '> , end> => '')> print> (functools.> reduce> (> lambda> a, b: a> +> b, lis))> > # using reduce to compute maximum element from list> print> (> 'The maximum element of the list is : '> , end> => '')> print> (functools.> reduce> (> lambda> a, b: a> if> a>b> else> b, lis))>

Вихід

The sum of the list elements is : 17 The maximum element of the list is : 6 

Використання функцій оператора

reduce() також можна поєднувати з операторними функціями для досягнення подібної функціональності, як і з лямбда-функціями, і робить код більш читабельним.

Python3




# python code to demonstrate working of reduce()> # using operator functions> > # importing functools for reduce()> import> functools> > # importing operator for operator functions> import> operator> > # initializing list> lis> => [> 1> ,> 3> ,> 5> ,> 6> ,> 2> ]> > # using reduce to compute sum of list> # using operator functions> print> (> 'The sum of the list elements is : '> , end> => '')> print> (functools.> reduce> (operator.add, lis))> > # using reduce to compute product> # using operator functions> print> (> 'The product of list elements is : '> , end> => '')> print> (functools.> reduce> (operator.mul, lis))> > # using reduce to concatenate string> print> (> 'The concatenated product is : '> , end> => '')> print> (functools.> reduce> (operator.add, [> 'geeks'> ,> 'for'> ,> 'geeks'> ]))>

Вихід

The sum of the list elements is : 17 The product of list elements is : 180 The concatenated product is : geeksforgeeks 

зменшити() проти накопичити()

Для обчислення підсумовування елементів послідовності можна використовувати як reduce(), так і collecte(). Але є відмінності в аспектах реалізації в обох цих.

  • reduce() визначено в модулі functools, collecte() – у модулі itertools.
  • reduce() зберігає проміжний результат і повертає лише остаточне підсумовуване значення. Тоді яккумуляція() повертає ітератор, що містить проміжні результати. Останнє число, яке повертає ітератор, є підсумковим значенням списку.
  • reduce(fun, seq) приймає функцію як 1-й і послідовність як 2-й аргумент. На противагу, collecte(seq, fun) приймає послідовність як 1-й аргумент і функцію як 2-й аргумент.

Python3




# python code to demonstrate summation> # using reduce() and accumulate()> > # importing itertools for accumulate()> import> itertools> > # importing functools for reduce()> import> functools> > # initializing list> lis> => [> 1> ,> 3> ,> 4> ,> 10> ,> 4> ]> > # printing summation using accumulate()> print> (> 'The summation of list using accumulate is :'> , end> => '')> print> (> list> (itertools.accumulate(lis,> lambda> x, y: x> +> y)))> > # printing summation using reduce()> print> (> 'The summation of list using reduce is :'> , end> => '')> print> (functools.> reduce> (> lambda> x, y: x> +> y, lis))>

Вихід

The summation of list using accumulate is :[1, 4, 8, 18, 22] The summation of list using reduce is :22 

функція reduce() із трьома параметрами

Функція зменшення, тобто функція reduce() працює з 3 параметрами в python3, а також з 2 параметрами. Простіше кажучи, reduce() розміщує 3-й параметр перед значенням другого, якщо він присутній. Таким чином, це означає, що якщо 2-й аргумент є порожньою послідовністю, то 3-й аргумент служить стандартним.

Ось приклад :(Цей приклад взято з документація functools.reduce(). містить версію функції Python:

Python3




# Python program to illustrate sum of two numbers.> 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> > # Note that the initializer, when not None, is used as the first value instead of the first value from iterable , and after the whole iterable.> tup> => (> 2> ,> 1> ,> 0> ,> 2> ,> 2> ,> 0> ,> 0> ,> 2> )> print> (> reduce> (> lambda> x, y: x> +> y, tup,> 6> ))> > # This code is contributed by aashutoshjha>

Вихід

15 

Цю статтю надав Манджіт Сінгх (С. Нандіні) .