Resumo: neste tutorial, você aprenderá como usar a função reduce() do Python para reduzir uma lista a um único valor.
Reduzindo uma lista
Às vezes, você deseja reduzir uma lista a um único valor. Por exemplo, suponha que você tenha uma lista de números:
scores = [75, 65, 80, 95, 50]
E para calcular a soma de todos os elementos da lista scores
, você pode usar um loop for
como este:
scores = [75, 65, 80, 95, 50]
total = 0
for score in scores:
total += score
print(total)
Saída:
365
Neste exemplo, reduzimos toda a lista a um único valor, que é a soma de todos os elementos da lista.
Introdução à função reduce() do Python
O Python oferece uma função chamada reduce()
que permite reduzir uma lista de maneira mais concisa.
Aqui está a sintaxe da função reduce()
:
reduce(fn,list)
A função reduce()
aplica a função fn
de dois argumentos cumulativamente aos itens da lista, da esquerda para a direita, para reduzir a lista a um único valor.
Ao contrário das funções map()
e filter()
, reduce()
não é uma função interna do Python. Na verdade, a função reduce()
pertence ao módulo functools
.
Para usar a função reduce()
, você precisa importá-la do módulo functools
usando a seguinte instrução na parte superior do arquivo:
from functools import reduce
Observe que você aprenderá mais sobre os módulos e como usá-los no tutorial posterior.
O seguinte ilustra como usar a função reduce()
para calcular a soma dos elementos da lista scores
:
from functools import reduce
def sum(a, b):
print(f"a={a}, b={b}, {a} + {b} ={a+b}")
return a + b
scores = [75, 65, 80, 95, 50]
total = reduce(sum, scores)
print(total)
Saída:
a=75, b=65, 75 + 65 = 140
a=140, b=80, 140 + 80 = 220
a=220, b=95, 220 + 95 = 315
a=315, b=50, 315 + 50 = 365
365
Como você pode ver claramente na saída, a função reduce()
adiciona cumulativamente dois elementos da lista da esquerda para a direita e reduz a lista inteira a um único valor.
Para tornar o código mais conciso, você pode usar uma expressão lambda em vez de definir a função sum()
:
from functools import reduce
scores = [75, 65, 80, 95, 50]
total = reduce(lambda a, b: a + b, scores)
print(total)
Resumo
- Use a função do python
reduce()
para reduzir uma lista a um único valor.