intensity = [42, 40, 38, 36, 35, 36, 45, 60, 75, 80, 78, 70,
65, 62, 64, 70, 82, 95, 98, 90, 75, 60, 50, 45]
def best_window(values, length):
best_start = 0
best_total = sum(values[0:length])
for start in range(1, len(values) - length + 1):
total = sum(values[start:start + length])
if total < best_total:
best_start, best_total = start, total
return best_start, best_total
start, total = best_window(intensity, 3)
print("Start at", str(start) + ":00, average", round(total / 3, 1), "g/kWh")
peak, ptotal = 17, sum(intensity[17:20])
print("Peak window 17:00 average", round(ptotal / 3, 1), "g/kWh")
A sliding-window search: try every start hour and keep the lowest total.