В среднем каждые 2 значения в списке, используя цикл - PullRequest
0 голосов
/ 04 июля 2018

У меня есть вопрос о том, как получить среднее значение каждых 2 элементов в списке в Python. Пример:

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)

Кто-нибудь знает, как создать этот цикл? Вот ссылка на код, который я сделал до сих пор: код

Ответы [ 5 ]

0 голосов
/ 04 июля 2018

Следующее является неэффективным решением. Но поскольку вопрос очень простой, может быть любопытно сначала узнать самое простое решение, прежде чем будет найдено эффективное решение, которое может быть достигнуто с помощью 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)))
0 голосов
/ 04 июля 2018

Другой подход предполагает, что у вас есть четное количество элементов, вы можете изменить форму массива так, чтобы нечетные элементы появлялись в первом столбце, а четные элементы появлялись во втором столбце двумерного массива, а затем принимали среднее значение каждый столбец:

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, поэтому, если вы хотите, чтобы у вас был список, просто вызовите метод tolist() в массиве NumPy:

>> b.tolist()
[3.3333333333333335, 2.0]
0 голосов
/ 04 июля 2018
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
0 голосов
/ 04 июля 2018

Если вы хотите чистый Python, а не Numpy:

mean = [sum(a[i::2]) / len(a[i::2]) for i in xrange(2)]

Вы также можете добавить from __future__ import division или map(float, a), чтобы избежать округления.

0 голосов
/ 04 июля 2018

my_list[1::2].mean() даст вам другой элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...