Python | Prefijo Suma de subarreglo hasta valor falso

La array de prefijos es bastante famosa en la práctica de la programación. Este artículo discutiría una variación de este esquema. Esto se ocupa de la suma de la lista acumulativa hasta un valor Falso, y nuevamente comienza la acumulación desde la aparición del valor Verdadero. Analicemos ciertas formas en que esto se puede realizar.

Método n.º 1: uso del método ingenuo
En el método ingenuo, simplemente construimos la nueva lista que consta de la suma de la anterior. valor de la lista hasta 0 y reinicia el procedimiento una vez que se encuentra un valor distinto de cero.

# Python3 code to demonstrate 
# Prefix Sum Subarray till False value 
# using naive method 
  
# initializing list of lists
test_list = [1, 3, 4, 0, 4, 5, 0, 7, 8]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# Prefix Sum Subarray till False value 
# using naive method
for i in range(1, len(test_list)):
    if test_list[i]:  
        test_list[i] += test_list[i - 1]
  
# printing result
print ("The computed modified new list : " + str(test_list))
Producción:

The original list is : [1, 3, 4, 0, 4, 5, 0, 7, 8]
The computed modified new list : [1, 4, 8, 0, 4, 9, 0, 7, 15]

 
Método #2: Usarfrom_iterable() + accumulate() + groupby()
Las tres funciones anteriores se combinan para realizar esta tarea en particular. En este, la función acumular realiza la tarea de suma de elementos, la función groupby agrupa los valores distintos de cero y el resultado es combinado por la from_iterable función.

# Python3 code to demonstrate 
# Prefix Sum Subarray till False value 
# from_iterable() + accumulate() + groupby()
from itertools import groupby, accumulate, chain
  
# initializing list of lists
test_list = [1, 3, 4, 0, 4, 5, 0, 7, 8]
  
# printing original list
print ("The original list is : " + str(test_list))
  
# Prefix Sum Subarray till False value 
# from_iterable() + accumulate() + groupby()
res = list(chain.from_iterable(accumulate(j) 
            for i, j in groupby(test_list, bool)))
  
# printing result
print ("The computed modified new list : " + str(res))
Producción:

The original list is : [1, 3, 4, 0, 4, 5, 0, 7, 8]
The computed modified new list : [1, 4, 8, 0, 4, 9, 0, 7, 15]

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 *