如何在单次循环中整合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
相关产品推荐
相关产品推荐

