Python | Suma de grupos distintos de cero

Muchas veces necesitamos obtener la suma de no toda la lista sino solo una parte de ella y en intervalos regulares. Estos intervalos a veces se deciden estáticamente antes del recorrido, pero a veces, la restricción es más dinámica y, por lo tanto, necesitamos manejarla de una manera más compleja. Los criterios discutidos aquí son la suma de grupos distintos de cero. Analicemos ciertas formas en que se puede realizar esta tarea.

Método #1: Usar bucles

Esta tarea se puede realizar usando la forma de fuerza bruta usando los bucles. Simplemente recorremos la lista de cada elemento para probar que su elemento siguiente sea un valor distinto de cero y realizamos la suma una vez que encontramos que el siguiente valor es cero y lo agregamos en la lista de resultados.

# Python3 code to demonstrate
# summation of non-zero groups
# Using loops
  
# initializing list
test_list = [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
  
# printing original list
print("The original list : " + str(test_list))
  
# using loops
# summation of non-zero groups
res = []
val = 0
for ele in test_list:
    if ele == 0:
        if val != 0:
            res.append(val)
            val = 0
    else:
        val += ele
  
# print result
print("The non-zero group summation of list is : " + str(res))
Producción :

The original list : [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
The non-zero group summation of list is : [13, 12, 4]

Método #2: Usaritertools.groupby() + sum()

Esta tarea en particular también se puede realizar usando la función groupby para agrupar todos los valores distintos de cero y la función de suma se puede usar para realizar su suma.

# Python3 code to demonstrate
# summation of non-zero groups
# Using itertools.groupby() + sum()
from itertools import groupby
  
# initializing list
test_list = [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
  
# printing original list
print("The original list : " + str(test_list))
  
# using itertools.groupby() + sum()
# summation of non-zero groups
res = [sum(val) for keys, val in groupby(test_list,
              key = lambda x: x != 0) if keys != 0]
  
# print result
print("The non-zero group summation of list is : " + str(res))
Producción :

The original list : [4, 9, 0, 0, 3, 4, 5, 0, 0, 4, 0]
The non-zero group summation of list is : [13, 12, 4]

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *