Python实现嵌套列表对应位置求和(单循环/无循环/不使用直接函数)
Python实现嵌套列表对应位置元素求和
需求说明
- 核心功能:接收二维嵌套列表作为输入,对所有子列表相同索引位置的元素做累加,最终返回一维累加结果列表
- 验证用例:
- 输入
[[1,2,3],[1,2,3]],预期输出[2,4,6] - 输入
[[1,1,1],[2,2,2],[3,3,3]],预期输出[6,6,6]
- 输入
- 实现约束:提供单循环、无显式循环两种实现方案,尽量不直接调用内置求和类函数
方案1:单循环实现
实现逻辑:先初始化和子列表等长的全0结果列表,对外层嵌套列表做遍历,逐位将当前子列表的元素累加到结果列表的对应索引位置,全程不调用sum()等内置求和函数。
def pos_sum_single_loop(nested_arr): # 初始化结果容器,长度匹配子列表长度,初始值为0 result = [0] * len(nested_arr[0]) for sub_arr in nested_arr: # 按索引对位累加,无额外求和函数调用 for i in range(len(sub_arr)): result[i] += sub_arr[i] return result # 用例测试 print(pos_sum_single_loop([[1,2,3],[1,2,3]])) # 输出 [2,4,6] print(pos_sum_single_loop([[1,1,1],[2,2,2],[3,3,3]])) # 输出 [6,6,6]
方案2:无显式循环实现(递归实现)
实现逻辑:不写任何for/while显式循环语句,通过递归拆分嵌套列表,逐次对两个列表做对位相加,最终得到累加结果,全程不调用内置求和函数。
def two_list_add(a, b): # 递归实现两个等长列表对位相加 if not a: return [] return [a[0] + b[0]] + two_list_add(a[1:], b[1:]) def pos_sum_no_loop(nested_arr): # 递归终止条件:只剩最后一个子列表直接返回 if len(nested_arr) == 1: return nested_arr[0] # 递归累加前n-1个列表的结果,和当前最后一个列表对位相加 return two_list_add(pos_sum_no_loop(nested_arr[:-1]), nested_arr[-1]) # 用例测试 print(pos_sum_no_loop([[1,2,3],[1,2,3]])) # 输出 [2,4,6] print(pos_sum_no_loop([[1,1,1],[2,2,2],[3,3,3]])) # 输出 [6,6,6]
注:以上实现默认输入的所有子列表长度一致,匹配题目给出的输入场景。
内容的提问来源于stack exchange,提问作者bharath
相关产品推荐
相关产品推荐

