Suma elementos de una lista entre ceros en Python

Tengo una lista:

lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7] 

Y necesito la sum de los elementos entre los 0 s en una nueva lista. Lo intenté

 lst1 = [] summ = 0 for i, elem in enumerate(lst): if elem != 0: summ = summ + elem else: lst1.append(summ) lst1.append(elem) summ = 0 

pero devuelve [11, 0, 0, 0, 57, 0] , mientras que espero [11, 0, 0, 57, 0, 8]

Aquí hay una forma de hacerlo con itertools.groupby y una lista de comprensión . La agrupación se realiza verificando si un elemento es cero y, si no es cero, se sumn todos los elementos del grupo:

 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) # [11, 0, 0, 57, 0, 8] 

Y, por supuesto, si los elementos de su lista son solo números (para evitar generalizar e introducir ambuigidades), la lambda se puede reemplazar por bool :

 result = [i for k, g in groupby(lst, bool) for i in ((sum(g),) if k else g)] 

estás agregando summ extra cuando es 0, y falta 1 summ al final

 lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7] lst1 = [] summ = 0 for i, elem in enumerate(lst): if elem != 0: summ = summ + elem else: if summ: lst1.append(summ) lst1.append(elem) summ = 0 if summ: lst1.append(summ) # lst1 = [11, 0, 0, 57, 0, 8] 

Solo agregue un lst1.append(summ) adicional después del bucle

 lst1 = [] summ = 0 for i, elem in enumerate(lst): if elem != 0: summ = summ + elem else: if summ: lst1.append(summ) lst1.append(elem) summ = 0 lst1.append(summ)