Calculando a média dos valores de uma lista. (Python)

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!

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , , , , .