Среднее из последних 6 элементов из данного элемента в списке - PullRequest
0 голосов
/ 28 июня 2018

у меня list=[307, 258, 164, 193, 174, 285, 230, 160, 257, 306, 173, 169, 192, 209, 110]

Я хочу вычислить среднее значение последних 6 элементов из заданного элемента [n] в списке, и после этого n должно повторяться на 1 [n + 1], и снова та же операция должна выполняться.

L3 [-15:] Я знаю, как получить доступ к нескольким последним элементам из списка d. new_list = my_list[(len(my_list) - 10):] .Как я могу использовать деку для этого

Пожалуйста, помогите, спасибо

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Я думаю, лучше использовать решение Жюльена Спронка , но если хотите, используйте решение панд rolling с mean:

out = pd.Series(mylist).rolling(6).mean().dropna().tolist()
print (out)

[230.16666666666666, 217.33333333333334, 
 201.0, 216.5, 
 235.33333333333334, 235.16666666666666, 
 215.83333333333334, 209.5, 
 217.66666666666666, 193.16666666666666]
0 голосов
/ 28 июня 2018

Вы можете использовать collections.deque для этого, чтобы удерживать только 6 элементов одновременно и находить среднее значение deque

from collections import deque
lst = [307, 258, 164, 193, 174, 285, 230, 160, 257, 306, 173, 169, 192, 209, 110]
n = 6
d = deque(maxlen=n)

[d.append(e) or sum(d)/float(n) for e in lst][n-1:]
# [230.16666666666666, 217.33333333333334, 201.0, 216.5, 235.33333333333334, 235.16666666666666, 215.83333333333334, 209.5, 217.66666666666666, 193.16666666666666]
0 голосов
/ 28 июня 2018

Я не уверен, что понимаю, о чем вы спрашиваете, но, возможно, вы ищете скользящее среднее. В данном случае я использую списочное понимание для создания скользящего среднего:

mylist = [307, 258, 164, 193, 174, 285, 230, 160, 257, 306, 173, 169, 192, 209, 110]
rolling_avg = [mylist[j-6:j]/6 for j in range(6, len(mylist))]
# [230.16666666666666,
#  217.33333333333334,
#  201.0,
#  216.5,
#  235.33333333333334,
#  235.16666666666666,
#  215.83333333333334,
#  209.5,
#  217.66666666666666]

, где первое число в rolling_avg является средним числом шести первых чисел в mylist, второе число является средним числом чисел с индексами от 1 до 6, ...

...