Calculating arithmetic mean (one type of average) in Python

PythonListMean

Python Problem Overview


Is there a built-in or standard library method in Python to calculate the arithmetic mean (one type of average) of a list of numbers?

Python Solutions


Solution 1 - Python

I am not aware of anything in the standard library. However, you could use something like:

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

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

In numpy, there's numpy.mean().

Solution 2 - Python

NumPy has a numpy.mean which is an arithmetic mean. Usage is as simple as this:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335

Solution 3 - Python

Use statistics.mean:

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

It's available since Python 3.4. For 3.1-3.3 users, an old version of the module is available on PyPI under the name stats. Just change statistics to stats.

Solution 4 - Python

You don't even need numpy or scipy...

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3

Solution 5 - Python

Use scipy:

import scipy;
a=[1,2,4];
print(scipy.mean(a));

Solution 6 - Python

Instead of casting to float you can do following

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

or using lambda

mean = lambda nums: sum(nums, 0.0) / len(nums)

UPDATES: 2019-12-15

Python 3.8 added function fmean to statistics module. Which is faster and always returns float.

> Convert data to floats and compute the arithmetic mean.

> This runs faster than the mean() function and it always returns a float. The data may be a sequence or iterable. If the input dataset is empty, raises a StatisticsError.

>fmean([3.5, 4.0, 5.25])

>4.25

> New in version 3.8.

Solution 7 - Python

from statistics import mean
avarage=mean(your_list)

for example

from statistics import mean

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

and result is

3.0

Solution 8 - Python

If you're using python >= 3.8, you can use the fmean function introduced in the statistics module which is part of the standard library:

>>> from statistics import fmean
>>> fmean([0, 1, 2, 3])
1.5

It's faster than the statistics.mean function, but it converts its data points to float beforehand, so it can be less accurate in some specific cases.

You can see its implementation here

Solution 9 - Python

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)

Solution 10 - Python

def avg(l):
    """uses floating-point division."""
    return sum(l) / float(len(l))
Examples:
l1 = [3,5,14,2,5,36,4,3]
l2 = [0,0,0]

print(avg(l1)) # 9.0
print(avg(l2)) # 0.0

Solution 11 - Python

I always supposed avg is omitted from the builtins/stdlib because it is as simple as

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

and any caveats would be addressed in caller code for local usage already.

Notable caveats:

  1. non-float result: in python2, 9/4 is 2. to resolve, use float(sum(L))/len(L) or from __future__ import division

  2. division by zero: the list may be empty. to resolve:

     if not L:
         raise WhateverYouWantError("foo")
     avg = float(sum(L))/len(L)
    

Solution 12 - Python

The proper answer to your question is to use statistics.mean. But for fun, here is a version of mean that does not use the len() function, so it (like statistics.mean) can be used on generators, which do not support 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)))

Solution 13 - Python

Others already posted very good answers, but some people might still be looking for a classic way to find Mean(avg), so here I post this (code tested in 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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionjrdiokoView Question on Stackoverflow
Solution 1 - PythonNPEView Answer on Stackoverflow
Solution 2 - PythonBengtView Answer on Stackoverflow
Solution 3 - Pythonkirbyfan64sosView Answer on Stackoverflow
Solution 4 - PythonMumonView Answer on Stackoverflow
Solution 5 - PythonElendurwenView Answer on Stackoverflow
Solution 6 - PythonVlad BezdenView Answer on Stackoverflow
Solution 7 - Pythonfariborz najafiView Answer on Stackoverflow
Solution 8 - PythonMathieu RolletView Answer on Stackoverflow
Solution 9 - PythonMuhoza yvesView Answer on Stackoverflow
Solution 10 - PythonjasonleonhardView Answer on Stackoverflow
Solution 11 - Pythonn611x007View Answer on Stackoverflow
Solution 12 - PythonPaulMcGView Answer on Stackoverflow
Solution 13 - PythonHashmatullah NoorzaiView Answer on Stackoverflow