# 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]
```

My Personal Notes arrow_drop_up