Как суммировать элементы изменяющегося списка в python?

Имеется список (spisok1), значения которого изменяются в зависимости от некоторой функции(в данном случае i**2 * x). Необходимо суммировать некоторое количество x раз эти значения, и записать окончательный результат в список (spisok2).

spisok1 = list()
    for x in range(3):
        spisok2 = list(map(sum, zip(spisok2, spisok1)))
        for i in range(5):
            spisok1 = list()
            znachenie1 = i**2 * x
            spisok1.append(znachenie1)
    print(spisok2)

Соответственно должны получиться промежуточные списки (spisok1)

[[0, 0, 0, 0, 0],
 [0, 1, 4, 9, 16],
 [0, 2, 8, 18, 32]]

И сложив значения этих списков необходимо получить окончательный список (spisok2):

[0, 3, 12, 27, 48]

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

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

Могу только предположить, что имелось в виду что-то такое:

spiski = [[i**2*x for i in range(5)] for x in range(3)]
print(spiski)
print(list(map(sum, zip(*spiski))))

Вывод:

[[0, 0, 0, 0, 0],
 [0, 1, 4, 9, 16],
 [0, 2, 8, 18, 32]]

[0, 3, 12, 27, 48]

Т.е. сгенерировали 3 списка по 5 элементов, а потом их сложили.

В принципе, складывать можно и "на ходу", но если хватает памяти, то лучше именно генерить списки, а потом их все между собой складывать, так быстрее и проще, чем добавлять значения в отдельный список с нулями. А если расход памяти тут существенен то можно сделать генератор и складывать данные из генератора, а не из списков, тогда данные будут генериться "на лету" и память не будет так сильно расходоваться.

Генератор получается простой заменой квадратных скобок на круглые в "списковых сокращениях":

spiski = ((i**2*x for i in range(5)) for x in range(3))
→ Ссылка