使用循环平均列表中的每2个值

时间:2018-07-04 13:43:15

标签: python python-2.7

我有一个问题,关于如何获取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

5 个答案:

答案 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 divisionmap(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)))