查找列表的平均值

时间:2012-01-27 20:58:18

标签: python list lambda average reduce

我必须在Python中找到列表的平均值。到目前为止,这是我的代码

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

我已经得到它所以它将列表中的值加在一起,但我不知道如何将它分成它们?

23 个答案:

答案 0 :(得分:488)

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

答案 1 :(得分:482)

如果你的减少已经返还了你的总和,那么你剩下要做的就是分裂。

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

尽管sum(l)/len(l)会更简单,因为你不需要lambda。

如果您想要更精确的浮点结果而不是int,那么只需使用float(len(l))而不是len(l)

答案 2 :(得分:260)

或者您可以使用numpy.mean

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

import numpy as np
print np.mean(l)

答案 3 :(得分:210)

statistics模块已added to python 3.4。它具有计算被称为mean的平均值的功能。您提供的列表的示例如下:

from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)

答案 4 :(得分:42)

当Python具有完美的reduce()函数时,为什么会使用sum()

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

(强制Python进行浮点除法需要float()。)

答案 5 :(得分:26)

如果您使用的是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,方差,模式,调和均值,中位数等,这些方法太有用了。

答案 6 :(得分:18)

您可以将0.0添加到总和:

,而不是强制转换为浮动
def avg(l):
    return sum(l, 0.0) / len(l)

答案 7 :(得分:10)

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

答案 8 :(得分:6)

我尝试使用上面的选项,但没有奏效。 试试这个:

<target name="checkVal"> <condition property="val.present"> <and> <available file="${srcDir}/somefile"/> <contains substring="MyClass.java" string="${srcDir}"/> </and> </condition> </target>

from statistics import mean

在python 3.5上工作

答案 9 :(得分:4)

在效率和速度方面,这些是我测试其他答案的结果:

# test mean caculation

import timeit
import statistics
import numpy as np
from functools import reduce
import pandas as pd

LIST_RANGE = 10000000000
NUMBERS_OF_TIMES_TO_TEST = 10000

l = list(range(10))

def mean1():
    return statistics.mean(l)


def mean2():
    return sum(l) / len(l)


def mean3():
    return np.mean(l)


def mean4():
    return np.array(l).mean()


def mean5():
    return reduce(lambda x, y: x + y / float(len(l)), l, 0)

def mean6():
    return pd.Series(l).mean()



for func in [mean1, mean2, mean3, mean4, mean5, mean6]:
    print(f"{func.__name__} took: ",  timeit.timeit(stmt=func, number=NUMBERS_OF_TIMES_TO_TEST))

和结果:

mean1 took:  0.17030245899968577
mean2 took:  0.002183011999932205
mean3 took:  0.09744236000005913
mean4 took:  0.07070840100004716
mean5 took:  0.022754742999950395
mean6 took:  1.6689282460001778

所以显然获胜者是: sum(l) / len(l)

答案 10 :(得分:4)

或使用pandas的{​​{1}}方法:

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 >>>

这是文档:

  

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

整个文档:

  

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

答案 11 :(得分:4)

如果你想获得的不仅仅是平均值(也就是平均值),你可以查看scipy stats

library(igraph)

data <- read.csv2("Data.csv", header=TRUE, na.strings = "")

Elike <- data[, 1:2]
Edislike <- like[, c(1, 3)]
glike <- graph.data.frame(Elike, directed=TRUE)
gdislike<- graph.data.frame(Edislike, directed=TRUE)

for(i in 1:nrow(Data)){
  ifelse(is.na(Edislike$Dislike[i]), Edislike$Dislike[i]<-Edislike$Name[i], Edislike$Dislike[i]<-Edislike$Dislike[i])
}
gabwahl <- simplify( gabwahl, remove.loops = TRUE)

E(glike)$curved <- 0.5
E(gdislike)$curved <- -0.1
E(glike)$color <- "green"
E(gdislike)$color <- "red"
E(glike)$arrow.size <- 0.1
E(gdislike)$arrow.size <- 0.1


V(glike)$shape <- "none"
V(gdislike)$shape <- "none"
V(glike)$label <- V(glike)$name
V(gdislike)$label <- V(gdislike)$name

plot(glike, layout=layout.circle)
plot(gdislike, layout=layout.circle, add = TRUE)

答案 12 :(得分:4)

作为初学者,我只是将其编码:

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)

答案 13 :(得分:4)

我在Udacity的问题中有一个类似的问题需要解决。而不是我编码的内置函数:

def list_mean(n):

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

比平时更长,但对初学者来说却相当具有挑战性。

答案 14 :(得分:3)

两者都可以在整数或至少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

@Andrew Clark的陈述是正确的。

答案 15 :(得分:3)

假设

$controller->run()

你可以注意到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]]的维度为3 * 10,如果你需要x到你可以输入的每一行

mean

不要忘记theMean = np.mean(x1,axis=1)

答案 16 :(得分:3)

要使用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

答案 17 :(得分:1)

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

l = map(float,l)
print '%.2f' %(sum(l)/len(l))

答案 18 :(得分:0)

结合上面的几个答案,我提出了以下与reduce一起使用的内容,并且假设您在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

答案 19 :(得分:0)

我想添加另一种方法

import itertools,operator
list(itertools.accumulate(l,operator.add)).pop(-1) / len(l)

答案 20 :(得分:0)

在列表中查找平均值 通过使用以下 PYTHON 代码:

Path is /Staging_app* OR /Staging_app/* OR /Staging_app

轻松尝试。

答案 21 :(得分:0)

print reduce(lambda x, y: x + y, l)/(len(l)*1.0)

或者喜欢之前发布的

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

1.0是为了确保你得到一个浮点除法

答案 22 :(得分:-6)

numbers = [0,1,2,3]

numbers[0] = input("Please enter a number")

numbers[1] = input("Please enter a second number")

numbers[2] = input("Please enter a third number")

numbers[3] = input("Please enter a fourth number")

print (numbers)

print ("Finding the Avarage")

avarage = int(numbers[0]) + int(numbers[1]) + int(numbers[2]) + int(numbers [3]) / 4

print (avarage)