Суммирование чисел с остановкой на определенной цифре
Не получается найти решение.
Есть некий массив чисел:
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)
Воспользуйтесь функционалом модуля 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]
Можно вот так:
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
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
Просто:
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