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

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

Ответы [ 22 ]

4 голосов
/ 13 февраля 2018

Если вы хотите получить больше, чем просто среднее значение (среднее значение), вы можете проверить статистику scipy

from scipy import stats
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(stats.describe(l))

# DescribeResult(nobs=9, minmax=(2, 78), mean=20.11111111111111, 
# variance=572.3611111111111, skewness=1.7791785448425341, 
# kurtosis=1.9422716419666397)
4 голосов
/ 17 октября 2018

Или используйте pandas Series.mean метод:

pd.Series(sequence).mean()

Демо-версия:

>>> import pandas as pd
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> pd.Series(l).mean()
20.11111111111111
>>> 

Из документов:

Series.mean(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)

А вот документы для этого:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.mean.html

И вся документация:

https://pandas.pydata.org/pandas-docs/stable/10min.html

4 голосов
/ 18 января 2016

как новичок, я только что написал:

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

total = 0

def average(numbers):
    total = sum(numbers)
    total = float(total)
    return total / len(numbers)

print average(L)
3 голосов
/ 28 января 2012

Чтобы использовать reduce для получения скользящего среднего, вам необходимо отслеживать как общее, так и общее количество элементов, которые вы видели до сих пор. поскольку это не тривиальный элемент в списке, вам также нужно будет передать reduce дополнительный аргумент, чтобы сложить его.

>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> running_average = reduce(lambda aggr, elem: (aggr[0] + elem, aggr[1]+1), l, (0.0,0))
>>> running_average[0]
(181.0, 9)
>>> running_average[0]/running_average[1]
20.111111111111111
3 голосов
/ 08 сентября 2015

Оба могут дать вам близкие значения в целых числах или по крайней мере 10 десятичных значений.Но если вы действительно рассматриваете длинные плавающие значения, оба могут быть разными.Подход может варьироваться в зависимости от того, чего вы хотите достичь.

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

Плавающие значения

>>> print reduce(lambda x, y: x + y, l) / float(len(l))
20.1111111111
>>> print sum(l)/float(len(l))
20.1111111111

@ Эндрю Кларк был прав в своем заявлении.

3 голосов
/ 22 марта 2017

предположим, что

x = [[-5.01,-5.43,1.08,0.86,-2.67,4.94,-2.51,-2.25,5.56,1.03], [-8.12,-3.48,-5.52,-3.78,0.63,3.29,2.09,-2.13,2.86,-3.33], [-3.68,-3.54,1.66,-4.11,7.39,2.08,-2.59,-6.94,-2.26,4.33]]

вы можете заметить, что x имеет размерность 3 * 10, если вам нужно получить mean для каждой строки, которую вы можете набрать

theMean = np.mean(x1,axis=1)

не забудьте import numpy as np

1 голос
/ 04 декабря 2012
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]

l = map(float,l)
print '%.2f' %(sum(l)/len(l))
0 голосов
/ 13 июня 2019

Найти среднее в списке Используя следующий код PYTHON :

l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(sum(l)//len(l))

попробуй это легко.

0 голосов
/ 28 января 2012
print reduce(lambda x, y: x + y, l)/(len(l)*1.0)

или как опубликовано ранее

sum(l)/(len(l)*1.0)

Значение 1,0 должно гарантировать, что вы получите деление с плавающей запятой

0 голосов
/ 12 января 2016

Комбинируя пару приведенных выше ответов, я пришел к следующему, которое работает с Reduce и не предполагает, что у вас есть L, доступный внутри функции сокращения:

from operator import truediv

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

def sum_and_count(x, y):
    try:
        return (x[0] + y, x[1] + 1)
    except TypeError:
        return (x + y, 2)

truediv(*reduce(sum_and_count, L))

# prints 
20.11111111111111
...