logo

reduce() in Python

In Python is reduce() een ingebouwde functie die een bepaalde functie toepast op de elementen van een iterabele, waardoor deze tot één enkele waarde worden teruggebracht.

De syntaxis voor reduce() is als volgt:

 functools.reduce(function, iterable[, initializer]) 
  • De functie-argument is een functie waaraan twee argumenten moeten doorgegeven worden en die één enkele waarde retourneert. Het eerste argument is de geaccumuleerde waarde en het tweede argument is de huidige waarde uit de iterabele waarde.
  • De itereerbaar argument is de reeks waarden die moet worden gereduceerd.
  • Het optionele initialisatieargument wordt gebruikt om een ​​initiële waarde voor het geaccumuleerde resultaat op te geven. Als er geen initialisator is opgegeven, wordt het eerste element van de iterabele gebruikt als de initiële waarde.

Hier is een voorbeeld dat laat zien hoe je reduce() kunt gebruiken om de som van een lijst met getallen te vinden:

json-bestanden lezen
 # Examples to understand the reduce() function from functools import reduce # Function that returns the sum of two numbers def add(a, b): return a + b # Our Iterable num_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # add function is passed as the first argument, and num_list is passed as the second argument sum = reduce(add, num_list) print(f'Sum of the integers of num_list : {sum}') # Passing 10 as an initial value sum = reduce(add, num_list, 10) print(f'Sum of the integers of num_list with initial value 10 : {sum}') 

Uitgang:

 Sum of the integers of num_list : 55 Sum of the integers of num_list with initial value 10 : 65 

In dit voorbeeld gebruiken we de functie reduce() om een ​​add-functie toe te passen die de som van twee waarden retourneert aan elk paar elementen in de getallenlijst, wat resulteert in de som van alle elementen.

Laten we de lambda-functie gebruiken als het eerste argument van de reduce()-functie:

 # Importing reduce function from functools from functools import reduce # Creating a list my_list = [1, 2, 3, 4, 5] # Calculating the product of the numbers in my_list # using reduce and lambda functions together product = reduce(lambda x, y: x * y, my_list) # Printing output print(f'Product = {product}') # Output : Product = 120 

Laten we eens kijken hoe de verminderen() functie werkt voor het gegeven voorbeeld:

De functie reduce() heeft twee argumenten nodig: een functie en een iterabele. In dit geval gebruiken we een lambda-functie lambda x, y: x * y als functie, en de getallenlijst als iterabel.

  • De lambda-functie accepteert de variabelen x en y, vermenigvuldigt ze en retourneert de uitkomst. Wanneer de lambda-functie voor het eerst wordt uitgevoerd, worden de variabelen x en y ingesteld op respectievelijk het eerste en tweede element van de my_list (dat wil zeggen x = 1 en y = 2). De lambda-functie vermenigvuldigt deze twee getallen en retourneert het resultaat (1 * 2 = 2).
  • De tweede keer dat de lambda-functie wordt aangeroepen, wordt x ingesteld op het resultaat van de vorige oproep (x = 2) en wordt y ingesteld op het derde element van de getallenlijst (d.w.z. y = 3). Het vermenigvuldigt deze twee waarden en retourneert het resultaat (2 * 3 = 6).
  • De lambda-functie wordt op deze manier herhaaldelijk aangeroepen voor elk element in de my_list totdat alle elementen zijn afgehandeld. De functie reduce() retourneert het product van alle elementen van de lijst, dat vervolgens aan de productvariabele wordt toegewezen als 120. Dit product wordt als volgt berekend: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Ten slotte drukken we de waarde van de productvariabele af met behulp van de print() functie, die 120 oplevert.

reduce() functie met operatorfuncties

We kunnen onze code beknopter en gemakkelijker leesbaar maken door operatorfuncties te gebruiken in plaats van lambda-functies.

Hier is een voorbeeld om het gebruik van operatorfuncties als het eerste argument van de reduceerfunctie te demonstreren:

 # Python program to demonstrate # how to use operator functions with reduce function # Importing reduce function from functools import reduce # Importing operator import operator # Creating lists my_list1 = [1, 2, 3, 4, 5] my_list2 = ['I', 'Love', 'Javatpoint'] # Calculating the sum of the numbers of my_list1 # using reduce and operator.add sum = reduce(operator.add, my_list1) # Calculating the product of the numbers of my_list1 # using reduce and operator.mul product = reduce(operator.mul, my_list1) # Concatenating all the elements in my_list2 # using reduce and operator.concat concated_str1 = reduce(operator.concat, my_list2) # We can achieve the same output by using operator.add concated_str2 = reduce(operator.add, my_list2) # Printing result print(f'Sum of all elements in my_list1 : {sum}') print(f'Product of all elements in my_list1 : {product}') print(f'Concatenated string by using operator.concat : {concated_str1}') print(f'Concatenated string by using operator.add : {concated_str2}') 

Uitgang:

 Sum of all elements in my_list1 : 15 Product of all elements in my_list1 : 120 Concatenated string by using operator.concat : ILoveJavatpoint Concatenated string by using operator.add : ILoveJavatpoint 

Deze code laat zien hoe u de functie reduce() en operatorfuncties kunt gebruiken om wiskundige bewerkingen en tekenreeksbewerkingen uit te voeren op iterables in Python.

Het verschil tussen de functies reduce() en accumuleren() begrijpen:

De Python functools-module biedt de functies reduce() en accumulatie(), die beide op vergelijkbare wijze op iterables werken.

  1. De verminderen () En accumuleren () functies zijn vergelijkbaar in die zin dat ze allebei twee argumenten accepteren: de iterabele zelf en een functie die de bewerking beschrijft die erop moet worden uitgevoerd. De manier waarop ze omgaan met de uitkomsten van de operatie is echter waar ze het meest van elkaar verschillen.
  2. De verminderen () functie voert de bewerking uit op de eerste twee elementen van de iterabele voordat dezelfde bewerking wordt uitgevoerd op het resultaat en het volgende element. Dit proces wordt herhaald totdat alle elementen van de iterabele zijn verwerkt. De uiteindelijke uitvoer van de bewerking wordt als één resultaat geretourneerd.
  3. Terwijl de accumuleren () de functie past de bewerking ook toe op de eerste twee elementen van de iterabele voordat dezelfde bewerking wordt uitgevoerd op het resultaat en de daaropvolgende elementen. De functie accumuleren() retourneert een iterator met de tussenresultaten van de bewerking. Met andere woorden, nadat elk element is afgehandeld, wordt de accumuleren () functie biedt een reeks waarden die de uitkomst van de bewerking vertegenwoordigen.

Een voorbeeld om het verschil tussen accumuleren() en reduce() te begrijpen:

 # Python Program to demonstrate the difference # between reduce and accumulate # Importing reduce and accumulate function from functools import reduce, accumulate # Creating a list my_list = [1, 2, 3, 4, 5] # Using reduce() to calculate the product of all numbers product = reduce(lambda x, y: x * y, my_list) print(f'Product using reduce() : {product}') # Output: 120 # Using accumulate() to calculate the product of all numbers products = list(accumulate(my_list, lambda x, y: x * y)) print(f'Products using accumulate() : {products}')# Output: [1, 2, 6, 24, 120] 

In dit voorbeeld hebben we een lijst met getallen [1, 2, 3, 4, 5]. We gebruiken verminderen() om het product van alle getallen te berekenen, wat een enkele waarde van 120 retourneert.

Wij gebruiken ook accumuleren() om het product van alle getallen te berekenen. In plaats van echter één enkele waarde terug te geven, accumuleren() retourneert een iterator die een reeks tussenresultaten oplevert: [1, 2, 6, 24, 120].

Dus het belangrijkste verschil tussen verminderen() en accumuleren() is dat reduce() een enkele waarde retourneert die de uiteindelijke uitvoer van de bewerking is. Accumulatie() retourneert daarentegen een iterator die een reeks tussenresultaten oplevert.