Python:如何在列表中找到每个数组的平均值?

时间:2018-03-16 15:36:53

标签: python-3.x list arraylist average

假设我有一个包含三个数组的列表如下:

[(1,2,0),(2,9,6),(2,3,6)]

我可以通过潜水每个"插槽来获得平均值。列表中的数组。 例如:

(1+2+2)/3, (2+0+9)/3, (0+6+6)/3

并使其成为只有3个整数的新arraylist。

4 个答案:

答案 0 :(得分:2)

您可以使用zip按索引关联每个内部元组中的所有元素

tups = [(1,2,0),(2,9,6),(2,3,6)]
print([sum(x)/len(x) for x in zip(*tups)])
# [1.6666666666666667, 4.666666666666667, 4.0]

您还可以在列表解析中执行sum(x)//len(x)round(sum(x)/len(x))之类的操作来获取整数。

答案 1 :(得分:0)

您可以通过以下几种方式完成此任务。

data = [(1,2,0),(2,9,6),(2,3,6)]
avg_array = []
for tu in data:
    avg_array.append(sum(tu)/len(tu))
print(avg_array)

使用列表理解

data = [(1,2,0),(2,9,6),(2,3,6)]
comp = [ sum(i)/len(i) for i in data]
print(comp)

答案 2 :(得分:0)

可以通过这样的方式来实现。

创建一个空数组。循环遍历当前数组并使用sum和len函数计算平均值。然后将平均值附加到新数组中。

array = [(1,2,0),(2,9,6),(2,3,6)]
arraynew = []

for i in range(0,len(array)):
    arraynew.append(sum(array[i]) / len(array[i]))

print arraynew   

答案 3 :(得分:0)

正如您在sumlen的评论中所说的那样,这很容易。

但是在python中我会做这样的事情,假设你想保持小数精度:

list = [(1, 2, 0), (2, 9, 6), (2, 3, 6)]
res = map(lambda l: round(float(sum(l)) / len(l), 2), list)

输出:

[1.0, 5.67, 3.67]

但正如你所说,你想在问题中想要3 int,就像这样:

res = map(lambda l: sum(l) / len(l), list)

输出:

[1, 5, 3]

编辑:

为了对每个元组的相同索引求和,最优雅的方法是@PatrickHaugh提供的解决方案。

另一方面,如果你不喜欢列表推导和一些内置函数zip,那么使用for循环这里有一个更长一点且不太优雅的版本:

arr = []
for i in range(0, len(list)):
    arr.append(sum(l[i] for l in list) / len(list))
print(arr)

输出:

[1, 4, 4]