Python|非零组的总和
很多时候,我们需要得到的不是整个列表的总和,而是它的一部分,并且定期进行。这些间隔有时是在遍历之前静态决定的,但有时,约束更加动态,因此我们需要以更复杂的方式处理它。这里讨论的标准是非零组的总和。让我们讨论一下可以完成此任务的某些方法。
方法#1:使用循环
可以使用循环的蛮力方式执行此任务。我们只是遍历列表中的每个元素来测试它的后续元素是否为非零值,并在我们发现下一个值为零并将其附加到结果列表中时执行求和。
# 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))
输出 :
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]
方法#2:使用itertools.groupby() + sum()
这个特定的任务也可以使用 groupby函数对所有非零值进行分组,并且 sum函数可以用于执行它们的求和。
# 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))
输出 :
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]