📜  Python|前缀 Sum Subarray 直到 False 值

📅  最后修改于: 2022-05-13 01:54:38.566000             🧑  作者: Mango

Python|前缀 Sum Subarray 直到 False 值

前缀数组在编程实践中非常有名。本文将讨论该方案的一种变体。这处理累积列表总和直到 False 值,并再次从 True 值的出现开始累积。让我们讨论可以执行此操作的某些方式。

方法#1:使用朴素方法
在朴素的方法中,我们只是构造了由 prev 的总和组成的新列表。 list 的值直到 0 并在遇到非零值时重新启动过程。

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


方法 #2 : 使用from_iterable() + accumulate() + groupby()
上述三个功能结合在一起执行此特定任务。在此,accumulate函数执行添加元素的任务,groupby函数对非零值进行分组,结果由from_iterable函数组合。

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