Calculando a média dos valores de uma lista. (Python)
Overview
Olá, entusiastas de Python! Neste post descontraído, mas informativo, vou desvendar os mistérios por trás do cálculo da média de números em uma lista usando este poderoso idioma. Seja você um iniciante ansioso por aprender ou um veterano em busca de aprimorar suas habilidades, prepare-se para explorar três métodos eficazes: a boa e velha matemática, a elegante função mean do numpy e a magistral arte do reduce combinado com lambda. Pegue sua caneca de café favorita, aconchegue-se na cadeira e vamos codificar juntos!
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!