我有一个问题,关于如何获取python列表中每2个元素的平均值。 例如:
a = [1, 3, 4, 1, 5, 2]
在这种情况下,因为它需要计算(1 + 4 + 5)/ 3和下一个(3 + 1 + 2)/ 3。新列表将具有以下值:
amean = [3.3333,2]
到目前为止,我已经设法求平均值,但是我不知道如何创建一个循环以使其返回并开始对第二个元素(3 +1 + 2)/ 3求平均值。
这是到目前为止我所做的事情:
import numpy as np
a = [1.,3.,4.,1., 5., 2.]
def altElement(my_list):
b = my_list[:len(my_list):2]
print b
return np.mean(b)
print altElement(a)
有人知道如何创建此循环吗? 这是我到目前为止已完成的代码的链接: code
答案 0 :(得分:1)
import numpy as np
a = np.asarray([1, 3, 4, 1, 5, 2])
print( a[::2].mean() ) #All Odd Elements
print( a[1::2].mean() ) #All Even Elements
输出:
3.33333333333
2.0
根据评论进行编辑(每24个元素)
import numpy as np
a = range(1, 73)
for i in map(None,*[iter(a)]*24):
print( np.array(i).mean() )
输出:
12.5
36.5
60.5
答案 1 :(得分:0)
my_list[1::2].mean()
将为您提供其他元素。
答案 2 :(得分:0)
如果您要使用纯Python而不是Numpy:
mean = [sum(a[i::2]) / len(a[i::2]) for i in xrange(2)]
您可能还希望添加from __future__ import division
或map(float, a)
以避免舍入。
答案 3 :(得分:0)
另一种方法是假设您具有偶数个元素,可以对数组进行整形,以使奇数元素出现在2D数组的第一列中,偶数元素出现在2D数组的第二列中,然后取平均值每列:
b = np.array([a]).reshape(-1,2).mean(axis=0)
>>> a = [1.,3.,4.,1., 5., 2.]
>>> b = np.array([a]).reshape(-1,2).mean(axis=0)
>>> b
array([ 3.33333333, 2. ])
输出当然是NumPy数组,因此,如果需要列表,只需在NumPy数组上调用tolist()
方法即可。
>> b.tolist()
[3.3333333333333335, 2.0]
答案 4 :(得分:0)
以下是无效的解决方案。但是因为这个问题是非常基本的,所以人们可能会好奇先了解最基本的解决方案,然后才可以使用numpy或列表理解来实现有效的解决方案
a = [1, 3, 4, 1, 5, 2]
list_1 = []
list_2 = []
for idx, elem in enumerate(a):
if idx % 2 == 0:
list_1.append(elem)
else:
list_2.append(elem)
print("Mean of the first every other elements ", sum(list_1)/float(len(list_1)))
print("Mean of the seond every other elements ", sum(list_2)/float(len(list_2)))