You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单次循环中整合local_sum函数(处理混合数字与子列表)

实现local_sum函数:合并数字段与所有子列表的求和结果

需求说明

给定包含数字和子列表的列表,local_sum()函数需完成以下处理:

  • 连续的数字直接求和,每个连续数字段的和作为结果列表的一个元素
  • 所有子列表分别求和后,将这些求和结果累加,最终以列表形式作为结果列表的一个元素
  • 无需额外后续处理,直接得到预期结果

输入输出示例

A = [3, 4, 2, [10, 22, 32, 14], 9, 8, 6, [22, 11]]
expected = [9, 23, [111]]  # 3+4+2=9;9+8+6=23;78+33=111
current_ans = [9, [78], 23, [33]]  # 当前代码的输出结果

当前代码问题

当前使用itertools.groupby的实现,会将每个连续的子列表组单独处理为一个列表元素,无法将所有子列表的求和结果合并为一个。

修正后的实现代码

def local_sum(L):
    current_num_sum = 0
    sub_total = 0
    result = []
    
    for elem in L:
        if isinstance(elem, list):
            # 若当前有未存入的数字段和,先加入结果
            if current_num_sum != 0:
                result.append(current_num_sum)
                current_num_sum = 0
            # 累加子列表的求和结果
            sub_total += sum(elem)
        else:
            # 累加当前数字到数字段和中
            current_num_sum += elem
    
    # 处理遍历结束后剩余的数字段和
    if current_num_sum != 0:
        result.append(current_num_sum)
    # 处理所有子列表的总和
    if sub_total != 0:
        result.append([sub_total])
    
    return result

# 测试验证
A = [3, 4, 2, [10, 22, 32, 14], 9, 8, 6, [22, 11]]
print(local_sum(A))  # 输出: [9, 23, [111]]

代码说明

  • 使用current_num_sum维护当前连续数字段的累加和,遇到子列表时将该值存入结果并重置
  • 使用sub_total维护所有子列表的求和结果总和,遍历过程中持续累加每个子列表的和
  • 遍历结束后,分别处理剩余的数字段和与子列表总和,确保所有结果都被存入最终列表

内容的提问来源于stack exchange,提问作者Daniel Hao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:54:18