Neste post mostro algumas formas de se calcular a média dos números de uma lista.
Vou utilizar três formas de calcular a média: Somando os itens e dividindo pela quantidade de elementos, utilizando a função mean do numpy e utilizando a reduce+lambda.
Para todos os exemplos, considere a lista abaixo:
my_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Somando os itens e dividindo pela quantidade de elementos
>>> sum(my_numbers) / len(my_numbers) 5.5
O código acima é bem simples e eficaz. Primeiro eu somo todos os números (sum) e depois divido pela quantidade de itens.
Se a lista “my_numbers” não possuir elementos, você terá problemas. Isso precisa ser verificado antes do calculo.
Utilizando função mean do numpy
>>> numpy.mean(my_numbers) 5.5
Acima, utilizei a função mean do Numpy. Basicamente, ela faz a mesma coisa que fizemos no primeiro exemplo. Por consequência, tem os mesmos problemas.
Utilizando reduce+lambda
reduce(lambda x, y: x + y, my_numbers) / len(my_numbers) 5.5
Antes de explicar este último exemplo, um lembrete: No Python3 você precisa utilizar o seguinte statement de importação para utilizar reduce:
from functools import reduce
Bom, explicando este último exemplo:
- Função lambda: Esta parte é bem simples. Esta é uma forma de criarmos uma função anonima simples. Neste caso, a função está recebendo dois argumentos (x e y) e retornando o resultado de x + y. Simples assim.
- Função reduce: Ela recebe dois argumentos: o primeiro é uma função e a segunda é uma sequencia de valores.
Basicamente, ela vai executar a função que você informar para cada um dos valores, acumulando o resultado, até que reste apenas um valor. Este valor final será retornado.
Exemplo: Se utilizarmos a função reduce do exemplo acima, mas passando a lista: [1, 2, 3, 4], o que vai acontecer é o seguinte:- Na primeira rodada, reduce vai enviar os dois primeiros elementos para a função, ou seja, 1 e 2. Isso resultará no valor 3.
- Na segunda rodada, a função reduce vai enviar o resultado da rodada anterior (3) com o próximo elemento da lista, que é 3. O novo resultado será 6.
Na terceira (e ultima) rodada, a função reduce vai enviar o último resultado (6) e o último elemento da lista, que é 4, retornando 10. - Como não existem mais elementos na lista, reduce vai retornar encerrar, retornando a soma final. (No caso, 10.)
- Depois dividimos a soma pela quantidade de itens (len(my_numbers)).
Pessoal do Python 2: Se todos os números da lista forem inteiros (int), o resultado da divisão também vai ser um int. Neste caso, para obter uma precisão maior do calculo, você pode converter len(my_numbers) para float(len(my_numbers)). No Python 3 isso não é necessário.
Se quiser alguns exemplos, incluindo algumas validações, confira o repositório que criei no meu Github!
Espero ter ajudado!
Latest posts by Breno RdV (see all)
- O que é Metaclass e como ela funciona. (#python #dev #metaclass) - janeiro 11, 2023
- Entenda a mágica dos Generators. (#python, #dev, #generator, #iterator) - dezembro 28, 2022
- Ordenando um DataFrame por múltiplas colunas. (#python #pandas #jupyter #dev #data) - agosto 3, 2022