Суммирование чисел с остановкой на определенной цифре

Не получается найти решение.
Есть некий массив чисел:

a=[1,2,3,2,1,5,0,3,2,4,1,0,4,7,3,2]

и переменные:

c=0
d=0
e=0

Нужно, чтобы все числа массива a суммировались, но при цифре 0 суммирование останавливалось. Т.е массив а, суммировать 1+2+3+2+1+5, и эту сумму записать в переменную с, и далее заново суммировать числа 3+2+4+1, сумма записать в переменную d и 4+7+3+2 записать в переменную e.

Пытаюсь сделать суммирование через

for x in a:
   x+=x

Но не знаю, как остановить суммирование на нуле и записать в разные переменные.

Подскажите, плиз.


Ответы (5 шт):

Автор решения: Сергей

Грубовато, но работает ниже (ещё и не сразу заработало:-(). Хочется чего-то поизящнее, конечно.

a = [1, 2, 3, 2, 1, 5, 0, 3, 2, 4, 1, 0, 4, 7, 3, 2]
c = 0
d = 0
e = 0
i = 0
while a[i]:
    c += a[i]
    i += 1
i += 1
while a[i]:
    d += a[i]
    i += 1
i += 1
while i < len(a):
    e += a[i]
    i += 1
print(c, d, e)

Вот чуть короче, но тоже не идеал:

a = [1, 2, 3, 2, 1, 5, 0, 3, 2, 4, 1, 0, 4, 7, 3, 2]
c, d, e, i = 0, 0, 0, 0
for x in a:
    if not x:
        i += 1
    elif i == 0:
        c += x
    elif i == 1:
        d += x
    else:
        e += x
print(c, d, e)
→ Ссылка
Автор решения: strawdog

Воспользуйтесь функционалом модуля itertools:

from itertools import groupby
a=[1,2,3,2,1,5,0,3,2,4,1,0,4,7,3,2]

res = []
for i, g in groupby(a, key=lambda x: x!=0):
    if i:
        res.append(sum(g))

print(res)

[14, 10, 16]

→ Ссылка
Автор решения: Bol4onok

Можно вот так:

a = [1, 2, 3, 2, 1, 5, 0, 3, 2, 4, 1, 0, 4, 7, 3, 2]
index = 0
temp_list = [0] * 3

for ele in a:
    if not ele:
        index += 1
    temp_list[index] += ele

c, d, e = temp_list
→ Ссылка
Автор решения: Namerek
from itertools import takewhile

a = [1, 2, 3, 2, 1, 5, 0, 3, 2, 4, 1, 0, 4, 7, 3, 2]

def take_sum_list(value_list: list):
    while value_list:
        part = list(takewhile(lambda s: s != 0, value_list))
        value_list = value_list[len(part) + 1:]
        yield sum(part)

print(
    list(take_sum_list(a))
)

# Если уверены в количестве значений
a, b, c = take_sum_list(a)
print(
    f'{a = }',
    f'{b = }',
    f'{c = }',
    sep='\n'
)

output

[14, 10, 16]
a = 14
b = 10
c = 16
→ Ссылка
Автор решения: TigerTV.ru

Просто:

a = [1,2,3,2,1,5,0,3,2,4,1,0,4,7,3,2]
res = [0]
for v in a:
    if v:
        res[-1] += v
    else:
        res.append(0)
c, d, e, *f, = res
print(c,d,e)

Вывод:

14 10 16
→ Ссылка