De reducera(roligt,seq) funktionen är van vid tillämpa en viss funktion som skickas i dess argument på alla listelement nämns i sekvensen som skickas.Denna funktion är definierad i funktionsverktyg modul.
Arbetar:
- I det första steget plockas de första två sekvenselementen och resultatet erhålls.
- Nästa steg är att tillämpa samma funktion på det tidigare uppnådda resultatet och numret som precis efterföljer det andra elementet och resultatet lagras igen.
- Denna process fortsätter tills inga fler element finns kvar i behållaren.
- Det slutliga returnerade resultatet returneras och skrivs ut på konsolen.
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>
Använda operatörsfunktioner
reduce() kan också kombineras med operatörsfunktioner för att uppnå liknande funktionalitet som med lambdafunktioner och gör koden mer 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>
reduce() kontra ackumulera()
Både reduce() och accumulate() kan användas för att beräkna summeringen av ett sekvenselement. Men det finns skillnader i genomförandeaspekterna i båda dessa.
- reduce() definieras i functools-modulen, accumulate() i itertools-modulen.
- reduce() lagrar det mellanliggande resultatet och returnerar endast det slutliga summeringsvärdet. Medan accumulate() returnerar en iterator som innehåller de mellanliggande resultaten. Det sista numret på iteratorn som returneras är summeringsvärdet för listan.
- reduce(fun, seq) tar funktionen som 1:a och sekvens som 2:a argument. Däremot tar ackumulera(seq, fun) sekvens som första argument och fungerar som andra 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 parametrar
Reduce-funktionen dvs reduce()-funktionen fungerar med 3 parametrar i python3 såväl som för 2 parametrar. För att uttrycka det på ett enkelt sätt placerar reduce() den 3:e parametern före värdet på den andra, om den finns. Det betyder alltså att om det andra argumentet är en tom sekvens, så fungerar det tredje argumentet som standard.
Här är ett exempel:(Detta exempel har tagits från functools.reduce() dokumentation innehåller en Python-version av 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
skillnaden mellan en gigabyte och en megabyte
15>
Denna artikel är bidragit av Manjeet Singh (S. Nandini) .