Расчет среднего арифметического (один тип среднего) в Python - PullRequest
247 голосов
/ 10 октября 2011

Есть ли в Python встроенный или стандартный библиотечный метод для вычисления среднего арифметического (одного типа среднего) списка чисел?

Ответы [ 12 ]

273 голосов
/ 10 октября 2011

Я ничего не знаю в стандартной библиотеке.Тем не менее, вы можете использовать что-то вроде:

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

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

В NumPy есть numpy.mean().

186 голосов
/ 14 декабря 2012

NumPy имеет numpy.mean, что является средним арифметическим.Использование так просто:

>>> import numpy
>>> a = [1, 2, 4]
>>> numpy.mean(a)
2.3333333333333335
171 голосов
/ 29 декабря 2013

Использование statistics.mean:

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

Доступно с Python 3.4.Для пользователей 3.1-3.3 старая версия модуля доступна в PyPI под именем stats.Просто измените statistics на stats.

53 голосов
/ 17 августа 2013

Тебе даже не нужен няшный или грубый ...

>>> a = [1, 2, 3, 4, 5, 6]
>>> print(sum(a) / len(a))
3
8 голосов
/ 19 ноября 2012

Используйте scipy:

import scipy;
a=[1,2,4];
print(scipy.mean(a));
5 голосов
/ 28 апреля 2017

Вместо того, чтобы бросать на поплавок, вы можете сделать следующее

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

или используя лямбду

mean = lambda nums: sum(nums, 0.0) / len(nums)
2 голосов
/ 02 октября 2018
from statistics import mean
avarage=mean(your_list)

например

from statistics import mean

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

и результат

3.0
1 голос
/ 10 сентября 2017
def avg(l):
    """uses floating-point division."""
    return sum(l) / float(len(l))

Примеры:

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

print(avg(l1)) # 9.0
print(avg(l2)) # 0.0
1 голос
/ 18 августа 2016
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)
0 голосов
/ 28 августа 2018

Правильный ответ на ваш вопрос - использовать statistics.mean. Но для забавы, вот версия означает, что не использует функцию len(), поэтому ее (например, statistics.mean) можно использовать на генераторах, которые не поддерживают 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)))
...