Вставка элементов в список с шагом методом 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 шт):
В принципе, в вашем коде достаточно исправить одну строчку - сам цикл:
for i in range(0, len(n) * 2 - 2, 2):
Но это в некотором роде хак, это работает в моей версии питона, но может не работать в какой-то другой, лучше переписать на while
с ручной проверкой окончания цикла и ручным сдвигом индекса.
В чём суть. При вставке элементов в список весь оставшийся список сдвигается вправо и поэтому вам нужно прибавлять индекс не на 1, а на 2. Но кроме того, сбивается итерирование, поэтому приходится ставить другую границу окончания цикла, заранее правильно рассчитанную. Через while
всё делается надёжнее и правильнее.
Задача решилась методом 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)