Как суммировать элементы изменяющегося списка в 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 шт):
Могу только предположить, что имелось в виду что-то такое:
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))