reduce() i Python

Det reducere(sjov,seq) funktion bruges til anvende en bestemt funktion, der er sendt i dens argument, på alle listeelementerne nævnt i rækkefølgen, der er videregivet. Denne funktion er defineret i funktionsværktøjer modul.

Arbejder :

  • I det første trin vælges de første to elementer af sekvensen, og resultatet opnås.
  • Næste trin er at anvende den samme funktion på det tidligere opnåede resultat, og tallet, der lige efterfølger det andet element, og resultatet gemmes igen.
  • Denne proces fortsætter, indtil der ikke er flere elementer tilbage i beholderen.
  • Det endelige returnerede resultat returneres og udskrives på konsollen.

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))>

Produktion

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

Brug af operatørfunktioner

reduce() kan også kombineres med operatorfunktioner for at opnå samme funktionalitet som med lambda-funktioner og gør koden mere læsbar.

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'> ]))>

Produktion

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

reducere() vs akkumulere()

Både reduce() og accumulate() kan bruges til at beregne summeringen af ​​en sekvenselementer. Men der er forskelle i implementeringsaspekterne i begge disse.

  • reduce() er defineret i functools-modulet, accumulate() i itertools-modulet.
  • reduce() gemmer det mellemliggende resultat og returnerer kun den endelige summeringsværdi. Hvorimod accumulate() returnerer en iterator, der indeholder de mellemliggende resultater. Det sidste tal i iteratoren, der returneres, er summationsværdien af ​​listen.
  • reduce(sjov, seq) tager funktionen som 1. og sekvens som 2. argument. I modsætning hertil tager accumulate(seq, fun) sekvens som 1. argument og fungerer som 2. argument.

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))>

Produktion

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

reduce() funktion med tre parametre

Reducer funktion, dvs. reduce() funktion fungerer med 3 parametre i python3 såvel som for 2 parametre. For at sige det på en enkel måde placerer reduce() den 3. parameter før værdien af ​​den anden, hvis den er til stede. Det betyder således, at hvis 2. argument er en tom sekvens, så fungerer 3. argument som standard.

Her er et eksempel:(Dette eksempel er taget fra functools.reduce() dokumentation indeholder en Python-version af funktionen:

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>

Produktion

15 

Denne artikel er bidraget af Manjeet Singh(S. Nandini) .