Calcul de la moyenne arithmétique (un type de Moyenne) en Python

Existe-t-il une méthode de bibliothèque intégrée ou standard en Python pour calculer la moyenne arithmétique (un type de moyenne) d'une liste de nombres?

226
demandé sur jtlz2 2011-10-10 21:19:17

12 réponses

Je ne suis au courant de rien dans la bibliothèque standard. Cependant, vous pourriez utiliser quelque chose comme:

def mean(numbers):
    return float(sum(numbers)) / max(len(numbers), 1)

>>> mean([1,2,3,4])
2.5
>>> mean([])
0.0

à numpy, il y a numpy.mean() .

249
répondu NPE 2016-08-09 07:27:14

NumPy a une numpy.mean qui est une moyenne arithmétique. L'Usage est aussi simple que ceci:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
169
répondu Bengt 2012-12-13 22:12:28

en Python 3.4, il y a un nouveau module statistics . Vous pouvez maintenant utiliser statistics.mean :

import statistics
print(statistics.mean([1,2,4])) # 2.3333333333333335

pour les utilisateurs 3.1-3.3, La version originale du module est disponible sur PyPI sous le nom stats . Il suffit de remplacer statistics par stats .

152
répondu kirbyfan64sos 2013-12-28 22:38:12

vous n'avez même pas besoin de numpy ou scipy...

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
48
répondu Mumon 2015-11-08 15:42:27

Utilisation scipy:

import scipy;
a=[1,2,4];
print(scipy.mean(a));
8
répondu Elendurwen 2016-05-07 01:56:37

au lieu de mouler pour flotter vous pouvez faire la suite

def mean(nums):
    return sum(nums, 0.0) / len(nums)

ou utilisant lambda

mean = lambda nums: sum(nums, 0.0) / len(nums)
4
répondu Vlad Bezden 2017-04-28 10:56:58
def avg(l):
    """uses floating-point division."""
    return sum(l) / float(len(l))

exemples:

l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]

print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
1
répondu jasonleonhard 2017-09-10 20:29:41
def list_mean(nums):
    sumof = 0
    num_of = len(nums)
    mean = 0
    for i in nums:
        sumof += i
    mean = sumof / num_of
    return float(mean)
1
répondu Muhoza yves 2018-07-03 11:06:23

j'ai toujours supposé que avg est omis dans le builtins / stdlib parce qu'il est aussi simple que

sum(L)/len(L) # L is some list

et toute mise en garde serait dont il est question dans le code de l'appelant pour l'usage local déjà .

attention:

  1. non-float résultat: en python2, 9/4 est 2. pour résoudre le problème, utilisez float(sum(L))/len(L) ou from __future__ import division

  2. la division par zéro: la liste peut être vide. pour résoudre:

    if not L:
        raise WhateverYouWantError("foo")
    avg = float(sum(L))/len(L)
    
0
répondu n611x007 2015-11-02 11:46:50

la bonne réponse à votre question Est d'utiliser statistics.mean . Mais pour le plaisir, voici une version de mean qui n'utilise pas la fonction len() , de sorte qu'il (comme statistics.mean ) peut être utilisé sur les générateurs, qui ne supportent pas len() :

from functools import reduce
from operator import truediv
def ave(seq):
    return truediv(*reduce(lambda a, b: (a[0] + b[1], b[0]), 
                           enumerate(seq, start=1), 
                           (0, 0)))
0
répondu PaulMcG 2018-08-29 14:05:21
from statistics import mean
avarage=mean(your_list)

par exemple

from statistics import mean

my_list=[5,2,3,2]
avarage=mean(my_list)
print(avarage)

et le résultat est

3.0
0
répondu fariborz najafi 2018-10-02 16:56:34

D'autres ont déjà posté de très bonnes réponses, mais certaines personnes pourraient toujours être à la recherche d'un moyen classique de trouver Moyen(avg), donc ici je poste ceci (code testé en Python 3.6):

def meanmanual(listt):

mean = 0
lsum = 0
lenoflist = len(listt)

for i in listt:
    lsum += i

mean = lsum / lenoflist
return float(mean)

a = [1, 2, 3, 4, 5, 6]
meanmanual(a)

Answer: 3.5
-1
répondu Hazmat 2017-09-11 01:53:03