Проблема в том, что ваши циклы не заходят так далеко. Обратите внимание, что new_theta
содержит 4 значения, и вы возвращаете 3 из них. Ваш внешний цикл for i, (theta, time) ...
выполняется 3 раза, внутренний цикл for j in range(5)...
выполняется 5 раз для каждого из этих 3 раз в общей сложности 15 итераций. Вот почему последний напечатанный номер 15.
В этом случае исправление не совсем очевидно и зависит от того, что вы хотите сделать. Следующее, по крайней мере, проходит через все 18 значений без ошибок, изменив внешний цикл для запуска 4 раза и изменив внутренний цикл для выхода при 19-м запуске (поскольку у вас нет 5 полных сообщений для итерации).
def get_new_theta(msg, theta, time):
new_theta = [theta]
new_time = [time]
for a, b in zip(msg[3::5], msg[4::5]):
new_theta.append(new_theta[-1] + a + b)
new_time.append(new_time[-1]+time)
return new_theta, new_time
msg = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]
theta = 1
time = 4.5
for i, (theta, time) in enumerate( zip(*get_new_theta(msg, theta, time)) ):
for j in range(5):
if i*5+j >= len(msg):
break
print(theta, msg[i*5+j], time)