如果我有
a=[1,2,3,4,5]
b=[1,2,3,4,5]
c=[1,2,3,4,5]
,我想仅在数组位置0,1,2
中找到a,b,c的平均值
输出将类似于1+2+3+1+2+3+1+2+3/9
我该怎么做?
答案 0 :(得分:2)
假设索引是连续的:您可以遍历列表,获取前三个元素的一部分,然后执行sum
:
In [1083]: a=[1,2,3,4,5]
...: b=[1,2,3,4,5]
...: c=[1,2,3,4,5]
...:
In [1084]: sum(sum(i[:3]) for i in [a, b, c]) / 9
Out[1084]: 2.0
或将zip
与itertools.islice
:
In [1085]: sum(sum(i) for i in itertools.islice(zip(a, b, c), 3)) / 9
Out[1085]: 2.0
变量值:
In [1086]: lists = [a, b, c]
In [1087]: indexes = 3
In [1088]: sum(sum(i[:indexes]) for i in lists) / (len(lists) * indexes)
Out[1088]: 2.0
In [1089]: sum(sum(i) for i in itertools.islice(zip(*lists), indexes)) / (len(lists) * indexes)
Out[1089]: 2.0
答案 1 :(得分:1)
还有其他方法,但是如果您不反对numpy
,这很容易,并且可以避免显式循环:
import numpy as np
np.mean(np.stack((a,b,c))[:,:3])
哪个返回2.0
上面说的:将所有数组的所有值的平均值取至第三位
如果您想进行显式循环,则可以执行以下操作:
my_list = []
for l in [a,b,c]:
my_list.extend(l[:3])
sum(my_list) / len(my_list)
还会返回2.0
答案 2 :(得分:0)
您可以将列表推导与内置函数一起使用,因此您不必导入任何内容。
lists = [a, b, c]
index = 3
mean = sum([(sum(item[:index])) for item in lists])/float(index*len(lists))