Here is one way: itertools.groupbyand understanding the list. Grouping is performed by checking whether the element is equal to zero, and if it is not equal to zero, all elements in the group are summed:
from itertools import groupby
lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]
f = lambda x: x==0
result = [i for k, g in groupby(lst, f) for i in (g if k else (sum(g),))]
print(result)
And, of course, if the items on your list are just numbers (to avoid generalizing and introducing ambuigities), lambdayou can replace it with bool:
result = [i for k, g in groupby(lst, bool) for i in ((sum(g),) if k else g)]
source
share