Расчет среднего арифметического (один тип среднего) в Python

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

Ответ 1

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

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

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

В numpy, numpy.mean()

Ответ 2

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

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

Ответ 3

Использовать statistics.mean:

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

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

Ответ 4

Вам даже не нужно numpy или scipy...

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

Ответ 5

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

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

Ответ 6

Вместо того, чтобы каститься в float, вы можете сделать следующее

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

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

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

Ответ 7

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

Ответ 8

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)

Ответ 9

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

Ответ 10

Я всегда предполагал, что avg опущен из встроенных /stdlib, потому что он прост как

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

и любые предостережения будут исправлены в коде вызывающего абонента для локального использования уже.

Заметные оговорки:

  • результат не-float: в python2, 9/4 - 2. для разрешения, используйте float(sum(L))/len(L) или from __future__ import division

  • деление на ноль: список может быть пустым. для решения:

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

Ответ 11

Правильный ответ на ваш вопрос - использовать statistics.mean. Но для забавы, вот версия 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)))

Ответ 12

Другие уже опубликовали очень хорошие ответы, но некоторые люди все равно могут искать классический способ поиска Mean (avg), поэтому здесь я публикую это (код протестирован в 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