Нахождение среднего из списка - PullRequest
409 голосов
/ 28 января 2012

Я должен найти среднее значение списка в Python.Пока это мой код

Ответы [ 22 ]

497 голосов
/ 28 января 2012
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
sum(l) / float(len(l))
485 голосов
/ 28 января 2012

Если ваше снижение уже возвращает вашу сумму, то все, что вам осталось сделать, это разделить.

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l) / len(l)

хотя sum(l)/len(l) будет проще, так как вам не понадобится лямбда.

Если вы хотите получить более точный результат с плавающей точкой вместо int, просто используйте float(len(l)) вместо len(l).

263 голосов
/ 28 января 2012

Или вы можете использовать numpy.mean :

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

import numpy as np
print np.mean(l)
217 голосов
/ 12 января 2014

A статистика модуль был добавлен в python 3.4 . У него есть функция для вычисления среднего, называемая среднее . Пример с предоставленным вами списком будет:

from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
44 голосов
/ 28 января 2012

Зачем вам использовать reduce() для этого, когда в Python есть совершенно громоздкая sum() функция?

print sum(l) / float(len(l))

(float() необходим, чтобы заставить Python выполнять деление с плавающей запятой.)

31 голосов
/ 11 мая 2017

Существует библиотека статистики, если вы используете python> = 3,4

https://docs.python.org/3/library/statistics.html

Вы можете использовать такой метод, как этот.Допустим, у вас есть список чисел, из которых вы хотите найти среднее: -

list = [11, 13, 12, 15, 17]
import statistics as s
s.mean(list)

У него есть и другие методы, такие как stdev, дисперсия, мода, среднее по гармонике, медиана и т. Д., Которые слишком полезны.*

18 голосов
/ 06 февраля 2014

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

def avg(l):
    return sum(l, 0.0) / len(l)
10 голосов
/ 28 января 2012

sum(l) / float(len(l)) - правильный ответ, но просто для полноты вы можете вычислить среднее значение с одним уменьшением:

>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114

Обратите внимание, что это может привести к небольшой ошибке округления:

>>> sum(l) / float(len(l))
20.111111111111111
6 голосов
/ 03 декабря 2015

Я пытался использовать опции выше, но не работал.Попробуйте это:

from statistics import mean

n = [11, 13, 15, 17, 19]
print(n)
print(mean(n))

работает на Python 3.5

4 голосов
/ 17 февраля 2015

У меня был похожий вопрос для решения проблем Udacity.Вместо встроенной функции я кодировал:

def list_mean(n):

    summing = float(sum(n))
    count = float(len(n))
    if n == []:
        return False
    return float(summing/count)

Гораздо дольше, чем обычно, но для новичка это довольно сложно.

...