Вычисление среднего в скользящем окне дает нули

window = []
window_sum = 0
for i in range (len(numbers_list)):
    try:
        window [numbers_list[i] : numbers_list[i + window_size] :]
    except:
        window [numbers_list[i]::]
    for q in range (len(window)):
        window_sum += window[q]
    temp_result = window_sum/window_size
    result.append (temp_result)
print(result)

Ответы (1 шт):

Автор решения: insolor

Операции window [numbers_list[i] : numbers_list[i + window_size] :] и window [numbers_list[i]::] никак window не изменяют. window у вас всегда остается пустым списком, которым вы его изначально инициализировали. Сумма элементов пустого списка - ноль.

Вам нужно взять сечение от number_list и записать (присвоить) в переменную window:

window = numbers_list[i: i + window_size]

try-except тут не нужно, ошибки при выходе второго индекса за границы списка не будет, просто сечение будет максимум до конца списка.

В исправленном виде более-менее полный пример будет таким:

import random

numbers_list = [random.randint(0, 100) for _ in range(10)]
print(numbers_list)

result = []
window_size = 5

for i in range (len(numbers_list)):
    window = numbers_list[i: i + window_size]

    window_sum = 0  # нужно обнулять сумму
    for q in range (len(window)):
        window_sum += window[q]
        
    temp_result = window_sum/window_size
    result.append (temp_result)
print(result)

Обратите внимание, что перед суммированием элементов окна нужно сумму обнулить, иначе это будет сумма всех предыдущих окон, и среднее будет неправильным.

Ну и сумму можно просто функцией sum считать:

for i in range(len(numbers_list)):
    window = numbers_list[i: i + window_size]
    window_sum = sum(window)
    average = window_sum/window_size
    result.append(average)
→ Ссылка