logo

reduzir() em Python

Em Python, reduzir() é uma função integrada que aplica uma determinada função aos elementos de um iterável, reduzindo-os a um único valor.

A sintaxe para reduzir() é a seguinte:

 functools.reduce(function, iterable[, initializer]) 
  • O argumento de função é uma função que recebe dois argumentos e retorna um único valor. O primeiro argumento é o valor acumulado e o segundo argumento é o valor atual do iterável.
  • O iterável argumento é a sequência de valores a serem reduzidos.
  • O argumento opcional do inicializador é usado para fornecer um valor inicial para o resultado acumulado. Se nenhum inicializador for especificado, o primeiro elemento do iterável será usado como valor inicial.

Aqui está um exemplo que demonstra como usar reduzir() para encontrar a soma de uma lista de números:

matriz de objetos em java
 # 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}') 

Saída:

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

Neste exemplo, usamos a função reduzir() para aplicar uma função add que retorna a soma de dois valores para cada par de elementos na lista de números, resultando na soma de todos os elementos.

Vamos usar a função lambda como primeiro argumento da função reduzir():

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

Vamos detalhar como o reduzir() função funciona para o exemplo dado:

A função reduzir() recebe dois argumentos: uma função e um iterável. Nesse caso, usamos uma função lambda lambda x, y: x * y como função e a lista de números como iterável.

  • A função lambda aceita as variáveis ​​​​x e y, multiplica-as e retorna o resultado. Quando a função lambda é executada inicialmente, as variáveis ​​​​x e y são definidas para o primeiro e segundo elementos, respectivamente, de my_list (ou seja, x = 1 e y = 2). A função lambda multiplica esses dois números e retorna o resultado (1 * 2 = 2).
  • Na segunda vez que a função lambda é chamada, x é definido como o resultado da chamada anterior (x = 2) e y é definido como o terceiro elemento da lista de números (ou seja, y = 3). Multiplica esses dois valores e retorna o resultado (2 * 3 = 6).
  • A função lambda é chamada repetidamente dessa forma para cada elemento em my_list até que todos os elementos tenham sido manipulados. A função reduzir() retorna o produto de todos os elementos da lista, que é então atribuído à variável produto como 120. Este produto é calculado da seguinte forma: ((((1 * 2) * 3)* 4)* 5) = 120.
  • Finalmente, imprimimos o valor da variável produto usando a função print(), que produz 120.

Função reduzir() com funções de operador

Podemos tornar nosso código mais conciso e fácil de ler usando funções de operador em vez de funções lambda.

Aqui está um exemplo para demonstrar o uso de funções de operador como o primeiro argumento da função de redução:

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

Saída:

 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 

Este código mostra como usar a função reduz() e funções de operador para realizar operações matemáticas e de string em iteráveis ​​em Python.

Compreendendo a diferença entre as funções reduzir() e acumular():

O módulo functools do Python fornece as funções reduzir() e acumular(), ambas operando em iteráveis ​​de maneiras comparáveis.

peso de kat timpf
  1. O reduzir () e acumular () as funções são semelhantes porque ambas aceitam dois argumentos: o próprio iterável e uma função que descreve a operação a ser realizada nele. A maneira como eles lidam com os resultados da operação, entretanto, é onde eles mais divergem entre si.
  2. O reduzir () faz a operação nos dois primeiros elementos do iterável antes de executar a mesma operação no resultado e no próximo elemento. Este processo é repetido até que todos os elementos do iterável tenham sido processados. A saída final da operação é retornada como um único resultado.
  3. Enquanto o acumular () também aplica a operação aos dois primeiros elementos do iterável antes de executar a mesma operação no resultado e nos elementos subsequentes, a função acumular() retorna um iterador contendo os resultados intermediários da operação. Em outras palavras, após cada elemento ter sido tratado, o acumular () fornece uma série de valores que representam o resultado da operação.

Um exemplo para entender a diferença entre acumular() e reduzir():

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

Neste exemplo, temos uma lista de números [1, 2, 3, 4, 5]. Nós usamos reduzir() para calcular o produto de todos os números, que retorna um único valor de 120.

Nós também usamos acumular() para calcular o produto de todos os números. No entanto, em vez de retornar um único valor, acumular() retorna um iterador que produz uma sequência de resultados intermediários: [1, 2, 6, 24, 120].

Então, a principal diferença entre reduzir() e acumular() é que reduzir() retorna um único valor que é a saída final da operação. Por outro lado, acumular() retorna um iterador que produz uma sequência de resultados intermediários.