I have a (long) list in which zeros and ones appear at random:
list1 = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
1.I want to get another list
- the sum of the list up to where 0 appears
- where 0 appears, retain 0 in the list
list2 = [3, 0, 2, 0, 1, 0, 3]
It should work for corner cases as well like zeroes at start or end
list1 = [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0]
list2 = [0, 3, 0, 2, 0, 1, 0, 3, 0]
Advertisement
Answer
You can use itertools.groupby
:
from itertools import groupby list1 = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1] out = [] for v, g in groupby(list1): if v: out.append(sum(g)) else: out.extend(g) # or out.append(0) if you want to keep only single zero print(out)
Prints:
[3, 0, 2, 0, 1, 0, 3]
For list1 = [0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0]
it prints:
[0, 3, 0, 2, 0, 1, 0, 3, 0]