Среднее значение для каждого значения в списке - среднее значение всех значений до этого. Для урезанной версии вашего примера:
>>> tData = [86,87,84,86]
Ходовые средние 86/1
, (86+87)/2
, (86+87+84)/3
и (86+87+84+86)/4
.
Таким образом, при каждом индексе текущее среднее - это общая сумма, делящаяся на (индекс + 1).
Вы можете получить погонных итоги с accumulate
:
>>> list(accumulate(tData))
[86, 173, 257, 343]
И вы можете получить (1 на основе) индексов с enumerate
:
>>> list(enumerate(accumulate(tData, start=1))
[(1, 86), (2, 73), (3, 257), (4, 343)]
Таким образом, просто разделить:
>>> [total/index for index, total in enumerate(accumulate(tData, start=1))]
[86.0, 86.5, 85.66666666666667, 85.75]
Или с помощью statistics
в Python 3.4 или его портировать/предшественнику stats
для 3,1-3,3:
>>> from stats import running_average
>>> running_average(tData)
[86, 86.5, 85.66666666666667, 85.75]
Конечно, вы всегда можете сделать это в явном виде, если вы предпочитаете:
>>> running_sum, running_sums = 0, []
>>> for value in tData:
... running_sum += value
... running_sum.append(running_sum)
>>> [value/index for index, value in enumerate(running_sums, start=1)]
[86, 86.5, 85.66666666666667, 85.75]
... или даже:
>>> running_sum, running_averages = 0, []
>>> for index, value in enumerate(tData, start=1):
... running_sum += value
... running_averages.append(running_sum/index)
>>> running_averages
[86, 86.5, 85.66666666666667, 85.75]
Где вы застряли? Что вы пробовали? – Blender
Я просто не уверен, как начать, чтобы сделать его средним. Я знаю, как сделать «обычный» средний, я просто не знаю, как сделать его «бегущим» – user2763241
Какая версия Python? Если вы можете подождать 3.4, просто «импортируйте статистику», и это однострочный. Для 3.1-3.3 вы можете использовать [backport] (https://pypi.python.org/pypi/stats/) в PyPI. В противном случае вам нужно написать несколько строк кода. – abarnert