logo

reduce() in Python

De verminderen(leuk,seq) functie wordt gebruikt een bepaalde functie die in het argument is doorgegeven, toepassen op alle lijstelementen vermeld in de doorgegeven reeks. Deze functie is gedefinieerd in functionele hulpmiddelen module.

Werkend:

  • Bij de eerste stap worden de eerste twee reekselementen gekozen en wordt het resultaat verkregen.
  • De volgende stap is om dezelfde functie toe te passen op het eerder behaalde resultaat en het getal dat net volgt op het tweede element, en het resultaat wordt opnieuw opgeslagen.
  • Dit proces gaat door totdat er geen elementen meer in de container achterblijven.
  • Het uiteindelijk geretourneerde resultaat wordt geretourneerd en afgedrukt op de console.

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

>

>

Uitvoer

json-bestanden lezen
The sum of the list elements is : 17 The maximum element of the list is : 6>

Operatorfuncties gebruiken

reduce() kan ook worden gecombineerd met operatorfuncties om dezelfde functionaliteit te bereiken als bij lambda-functies en maakt de code beter leesbaar.

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

>

>

Uitvoer

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

verminderen() versus accumuleren()

Zowel reduce() als accumul() kunnen worden gebruikt om de sommatie van een reekselementen te berekenen. Maar er zijn verschillen in de implementatieaspecten van beide.

  • reduce() wordt gedefinieerd in de functools-module, accumul() in de itertools-module.
  • reduce() slaat het tussenresultaat op en retourneert alleen de uiteindelijke sommatiewaarde. Terwijl accumulatie() een iterator retourneert die de tussenresultaten bevat. Het laatste getal van de geretourneerde iterator is de sommatiewaarde van de lijst.
  • reduce(fun, seq) neemt de functie als 1e en reeks als 2e argument. Accumuleren (seq, fun) daarentegen neemt de reeks als eerste argument en functioneert als tweede 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))>

>

>

Uitvoer

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

reduce() functie met drie parameters

Reduce-functie, d.w.z. reduce()-functie werkt met 3 parameters in python3 en ook voor 2 parameters. Om het simpel te zeggen: reduce() plaatst de derde parameter vóór de waarde van de tweede, als deze aanwezig is. Het betekent dus dat als het tweede argument een lege reeks is, het derde argument als standaardargument dient.

Hier is een voorbeeld:(Dit voorbeeld is overgenomen uit de functools.reduce() documentatie bevat een Python-versie van de functie:

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>

>

>

Uitvoer

15>

Dit artikel is bijgedragen door Manjeet Singh (S. Nandini) .