python list sum

python - Suma los números en una lista pero cambia su signo después de encontrar cero



(5)

Necesito sumar todos los números en la lista. Si ocurre 0, comience a restar, hasta otro 0, comience a sumar.

Por ejemplo:

[1, 2, 0, 3, 0, 4] -> 1 + 2 - 3 + 4 = 4 [0, 2, 1, 0, 1, 0, 2] -> -2 - 1 + 1 - 2 = -4 [1, 2] -> 1 + 2 = 3 [4, 0, 2, 3] = 4 - 2 - 3 = -1

Esto es lo que he intentado:

sss = 0 for num in numbers: if 0 == num: sss = -num else: sss += num return sss


Aquí hay una solución que alterna entre dos operadores (suma y resta) cada vez que un valor en la lista es cero:

from operator import add, sub from itertools import cycle cycler = cycle([add, sub]) current_operator = next(cycler) result = 0 my_list = [1, 2, 0, 3, 0, 4] for number in my_list: if number == 0: current_op = next(cycler) else: result = current_operator(result, number)


Cambie el signo cuando el elemento de la lista sea igual a 0.

result = 0 current_sign = 1 for element in your_list: if element == 0: current_sign *= -1 result += current_sign*element


Otra variación con el módulo del operator y la negación bit a bit ~ :

import operator def accum_on_zero(lst): res = 0 ops, pos = (operator.add, operator.sub), 0 for i in lst: if i == 0: pos = ~pos res = ops[pos](res, i) return res print(accum_on_zero([1, 2, 0, 3, 0, 4])) # 4 print(accum_on_zero([0, 2, 1, 0, 1, 0, 2])) # -4


Prueba esto:

d = [1, 2, 0, 3, 0, 4] sum = 0 sign = False for i in d: if i == 0: if sign == False: sign = True else: sign = False else: if sign == False: sum += i else: sum -= i print(sum)


lst = [1, 2, 0, 3, 0, 4] print(sum([v * (-1) ** lst[0:i].count(0) for i, v in enumerate(lst)]))