Редактировать список

Есть список произвольных значений:

L = [-50, 50, 20, -70, 100, -70, 80, -60, -10, 70, -70, 90, -20, -20, -90, 80]

Нужно отредактировать таким образом: если несколько значений подряд имеют одинаковый знак - то эти значения суммируются. В итоге должен получиться список:

L = [-50, 70, -70, 100, -70, 80, -70, 70, -70, 90, -130, 80].

Пытаюсь в цикле пройти по условиям и получаю даже вроде как правильные максимальное и минимальное значение в списке, но сам новый список выглядит не так как должен.

L = [-50, 50, 20, -70, 100, -70, 80, -60, -10, 70, -70, 90, -20, -20, -90, 80]
count = len(L)

try:
    for c in range(count):
        if L[c] < 0 and L[c+1] > 0 and L[c+2] > 0:
            print(L[c], L[c+1] + L[c+2])
        if L[c] > 0 and L[c+1] > 0 and L[c+2] < 0:
            print(L[c+2])
        if L[c] > 0 and L[c+1] < 0 and L[c+2] > 0:
            print(L[c+2])
        if L[c] < 0 and L[c+1] < 0 and L[c+2] < 0:
            print(L[c] + L[c+1] + L[c+2])
except:
    pass

Подскажите, пожалуйста, как решить эту задачу.


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

Автор решения: Алексей Р

Один из вариантов

L = [-50, 50, 20, -70, 100, -70, 80, -60, -10, 70, -70, 90, -20, -20, -90, 80]

out, s, prev_sgn = [], 0, None

for x in L:
    cur_sgn = x and (1, -1)[x < 0] # получаем знак очередного числа
    if prev_sgn is None or cur_sgn == prev_sgn: # если знаки равны,
        s += x # накапливаем сумму
    else: # если знак сменился, 
        out.append(s) # отправляем сумму в итоговый список
        s = x # и сбрасываем сумму
    prev_sgn = cur_sgn # текущий знак становится предыдущим перед следующей итерацией
if L: # если список не был пустым,
    out.append(s) # то добавляем последнюю сумму

print(out)
[-50, 70, -70, 100, -70, 80, -70, 70, -70, 90, -130, 80]
→ Ссылка