Skip to content
Related Articles

Related Articles

Python | Prefix Sum Subarray till False value
  • Last Updated : 09 May, 2020

The prefix array is quite famous in the programming practice. This article would discuss a variation of this scheme. This deals with the cumulative list sum till a False value, and again starts cumulation from the occurrence of True value. Let’s discuss certain ways in which this can be performed.

Method #1 : Using Naive Method
In the naive method, we just construct the new list comprising of the summation of prev. value of list until 0 and restarts the procedure once a non-zero value is encountered.




# 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))
Output:
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]

 
Method #2 : Using from_iterable() + accumulate() + groupby()
The above three functions combine together to perform this particular task. In this, the accumulate function performs the task of addition of elements, groupby function groups the non-zero values and the result is combined by the from_iterable function.




# 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))
Output:
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]

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning – Basic Level Course




My Personal Notes arrow_drop_up
Recommended Articles
Page :