У меня есть (длинный) список, в котором нули и фигуры появляются наугад:
list_a = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
Я хочу получить list_b
- сумма списка до 0
-
где 0 появляется, сохранить 0 в списке
list_b = [1, 2, 3, 0, 1, 2, 0, 1, 0, 1, 2, 3]
Я могу реализовать это следующим образом:
list_b = []
for i, x in enumerate(list_a):
if x == 0:
list_b.append(x)
else:
sum_value = 0
for j in list_a[i::-1]:
if j != 0:
sum_value += j
else:
break
list_b.append(sum_value)
print(list_b)
но фактическая длина списка очень длинная.
Итак, я хочу улучшить код для высокой скорости. (если он не читается)
Я меняю код следующим образом:
from itertools import takewhile
list_c = [sum(takewhile(lambda x: x != 0, list_a[i::-1])) for i, d in enumerate(list_a)]
print(list_c)
Но это не достаточно быстро. Как я могу сделать это более эффективно?