Редактировать список
Есть список произвольных значений:
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]