Вставка суммы элементов списка при его повторении

#python #python-3.x #list #logic #sequence

Вопрос:

Я пытался сгенерировать последовательность, подобную этой

 1 2 1
1 3 2 3 1
1 4 3 5 2 5 3 4 1
 

Последовательность в основном вставляет сумму 2 последовательных элементов списка между ними.
Вот мое решение:

 a =[1,1]
h=[]
for j in range(1,5):
    h=a
    for i in range(0,len(h),2):
        h.insert(i 1, a[i] a[i 1])
    print(a)
    a=h       
 

Но это каким-то образом генерирует половину правильной последовательности после 3-й итерации.

 [1, 2, 1]
[1, 3, 2, 3, 1]
[1, 4, 3, 5, 2, 5, 3, 1]
[1, 5, 4, 7, 3, 8, 5, 7, 2, 5, 3, 1]
[1, 5, 4, 7, 3, 8, 5, 7, 2, 5, 3, 1]
 

Кто-нибудь может помочь с тем, что я сделал не так.
Заранее спасибо

Ответ №1:

Список — это дескрипторы. Если вы измените одно, изменится и другое. Вот мое предложение.

 a =[1,1]
h=[]
for j in range(1,5):
    h=a.copy()
    for i in range(0,len(a)-1,1):
        h.insert(2*i 1, a[i] a[i 1])
    print(a)
    a=h.copy()
 

Ответ №2:

h это излишне. Обратный цикл более эффективен

 a = [1, 1]
for j in range(1, 7):
    for i in range(len(a) - 1, 0, -1):
        a.insert(i, a[i - 1]   a[i])
    print(a)
 
 [1, 2, 1]
[1, 3, 2, 3, 1]
[1, 4, 3, 5, 2, 5, 3, 4, 1]
[1, 5, 4, 7, 3, 8, 5, 7, 2, 7, 5, 8, 3, 7, 4, 5, 1]