如何计算一行数据中第5至第10个非零值的总和
非零值区间求和计算方法
通用计算流程
- 先遍历整行原始数据,按照从左到右的顺序把所有非零值单独筛选出来,保持原有顺序形成非零值序列
针对你给出的示例数据[0, 2, 0, 1, 2, 7, 8, 1, 0, 3, 0, 1, 0, 3, 0, 4, 8, 0],筛选后得到的非零值序列为[2, 1, 2, 7, 8, 1, 3, 1, 3, 4, 8],其中第5个到第10个非零值正好是你提到的8、1、3、1、3、4 - 截取上述非零值序列中第5个到第10个的连续区间
- 对截取到的区间值做累加求和
示例数据的计算结果:8 + 1 + 3 + 1 + 3 + 4 = 20
常见场景的具体实现
- 手动核对:逐个数原始序列里的非零元素,从第5个出现的非零值开始累加,数到第10个非零值时停止计算即可
- Excel 操作实现:假设原始数据存放在A1到R1的连续单元格中
- 在相邻的辅助行中,逐格计算非零值的累计序号:第一格公式写
=IF(A1<>0,1,0),第二格写=IF(B1<>0, N(A2)+1, N(A2))(A2为上一格辅助单元格的位置),向右拖动填充到R2位置,就能得到每一个单元格对应的非零排序号 - 用条件求和函数计算结果:输入公式
=SUMIFS(A1:R1, A1:R1, "<>0", A2:R2, ">=5", A2:R2, "<=10"),就能直接得到目标区间的和
- 在相邻的辅助行中,逐格计算非零值的累计序号:第一格公式写
- Python 代码实现:通过列表推导式过滤非零值后切片求和
raw_row_data = [0,2,0,1,2,7,8,1,0,3,0,1,0,3,0,4,8,0] non_zero_values = [item for item in raw_row_data if item != 0] # 列表切片为左闭右开规则,[4:10]正好取出索引4到9的6个元素,对应第5到第10个非零值 target_total = sum(non_zero_values[4:10]) print(target_total) # 运行输出为20
注意:日常计数时我们习惯从1开始数第1个、第2个元素,对应程序内列表的索引位置需要减1,避免出现定位偏移
内容的提问来源于stack exchange,提问作者Stan Shvaika
相关产品推荐
相关产品推荐

