Вставка элементов в список с шагом методом insert

Есть случайный список:

[8, 5, 2, 5, 2].

По условию задачи необходимо получить новый список, где между каждой парой элементов исходного списка вставляется новый элемент, равный сумме значений соседних элементов:

[8, 13, 5, 7, 2, 7, 5, 7, 2]

Код необходимо реализовать методом insert. Пробую следующий вариант, но безуспешно:

from random import*
seed(35)
n=[randint(0,9) for i in range(5)] 
print(n)
for i in range(len(n)):
     n.insert(i+1,n[i]+n[i+1])
print(n)

Буду признательна за подсказку


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

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

В принципе, в вашем коде достаточно исправить одну строчку - сам цикл:

for i in range(0, len(n) * 2 - 2, 2):

Но это в некотором роде хак, это работает в моей версии питона, но может не работать в какой-то другой, лучше переписать на while с ручной проверкой окончания цикла и ручным сдвигом индекса.

В чём суть. При вставке элементов в список весь оставшийся список сдвигается вправо и поэтому вам нужно прибавлять индекс не на 1, а на 2. Но кроме того, сбивается итерирование, поэтому приходится ставить другую границу окончания цикла, заранее правильно рассчитанную. Через while всё делается надёжнее и правильнее.

→ Ссылка
Автор решения: Altushka-97

Задача решилась методом Stanislav Volodarskiy. Большое спасибо.

from random import*
seed(40)
n=[randint(0,9) for i in range(5)] 
print(n)
for i in range(len(n)):
    if i%2 == 0:
        n.insert(i+1,n[i]+n[i+1])
print(n)
→ Ссылка