假设我有一个包含三个数组的列表如下:
[(1,2,0),(2,9,6),(2,3,6)]
我可以通过潜水每个"插槽来获得平均值。列表中的数组。 例如:
(1+2+2)/3, (2+0+9)/3, (0+6+6)/3
并使其成为只有3个整数的新arraylist。
答案 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)
正如您在sum
和len
的评论中所说的那样,这很容易。
但是在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]