logo

reduce() a Python

El reduir(diversió,seq.) funció s'acostuma a aplicar una funció particular passat en el seu argument a tots els elements de la llista s'esmenta a la seqüència passada. Aquesta funció es defineix a functools mòdul.

Treball :

  • En el primer pas, es trien els dos primers elements de la seqüència i s'obté el resultat.
  • El següent pas és aplicar la mateixa funció al resultat obtingut anteriorment i el nombre que acaba de succeir al segon element i el resultat es torna a emmagatzemar.
  • Aquest procés continua fins que no queden més elements al contenidor.
  • El resultat final retornat es retorna i s'imprimeix a la consola.

Python 3




dormir en js



# 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>>>b, lis))>

>

>

Sortida

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

Ús de les funcions d'operador

reduce() també es pot combinar amb funcions d'operador per aconseguir la funcionalitat similar a les funcions lambda i fer que el codi sigui més llegible.

Python 3




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

>

>

Sortida

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

reduir () vs acumular ()

Tant reduce() com acumula() es poden utilitzar per calcular la suma d'elements d'una seqüència. Però hi ha diferències en els aspectes d'implementació en tots dos.

  • reduce() es defineix al mòdul functools, accumulate() al mòdul itertools.
  • reduce() emmagatzema el resultat intermedi i només retorna el valor de suma final. Mentre que accumulate() retorna un iterador que conté els resultats intermedis. L'últim número de l'iterador retornat és el valor de suma de la llista.
  • reduce(fun, seq) pren la funció com a primer argument i la seqüència com a segon argument. En canvi, accumulate(seq, fun) pren la seqüència com a primer argument i funciona com a segon argument.

Python 3




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

llista enllaçada java

>

>

Sortida

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

funció reduce() amb tres paràmetres

La funció de reducció, és a dir, la funció de reduir () funciona amb 3 paràmetres a Python3 i també amb 2 paràmetres. Per dir-ho d'una manera senzilla reduce() col·loca el tercer paràmetre abans del valor del segon, si està present. Per tant, vol dir que si el segon argument és una seqüència buida, el tercer argument serveix com a predeterminat.

Aquí hi ha un exemple: (Aquest exemple s'ha pres del documentació de functools.reduce(). inclou una versió de Python de la funció:

Python 3




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

>

>

fer mentre estàs en java
Sortida

15>

Aquest article és contribuït per Manjeet Singh (S. Nandini) .