如何对3D数组中每个子数组求和?修正循环代码问题
3D数组内层一维数组求和的循环实现方案
原始3D数组
arr_values = [[[71, 70, 80, 80, 50, 90, 100, 85, 75], [70, 70, 80, 80, 50, 50, 100, 85, 75], [70, 70, 80, 80, 50, 90, 100, 85, 78]], [[70, 70, 80, 80, 50, 90, 100, 85, 75], [70, 70, 80, 80, 50, 50, 100, 85, 75], [70, 70, 80, 80, 50, 90, 100, 85, 79]], [[70, 70, 80, 80, 50, 90, 100, 85, 75], [70, 70, 80, 80, 50, 50, 100, 85, 75], [70, 70, 80, 80, 50, 90, 100, 85, 80]], [[70, 70, 80, 80, 50, 90, 100, 85, 75], [70, 70, 80, 80, 50, 50, 100, 85, 75], [70, 70, 80, 80, 50, 90, 100, 85, 81]], [[70, 70, 80, 80, 50, 90, 100, 85, 73], [70, 70, 80, 80, 50, 50, 100, 85, 74], [70, 70, 80, 80, 50, 90, 100, 85, 76], [70, 70, 80, 80, 50, 90, 100, 82, 73]]
期望输出格式
[[701] [660] [703]] [[700] [660] [704]] [[700] [660] [705]] [[700] [660] [706]] [[698] [659] [701] [695]]
原有代码的问题分析
你写的循环代码存在两个核心问题:
for values in arr_values: for value in range(len(values)): a=0 for a in values[value]: a += a print(a)
- 变量覆盖错误:内层循环用
a作为遍历变量,直接覆盖了之前初始化的a=0,导致累加逻辑完全失效,最后得到的a只是内层数组的最后一个元素。 - 结果结构缺失:没有将每个内层数组的求和结果组织成嵌套数组,只是单独打印数值,无法得到期望的二维嵌套格式。
正确的循环实现代码
# 初始化最终结果数组 result = [] # 遍历外层的每个二维子数组 for sub_arr in arr_values: # 存储当前二维子数组的求和结果 current_group = [] # 遍历二维子数组中的每个一维数组 for inner_arr in sub_arr: total = 0 # 对一维数组的每个元素求和 for num in inner_arr: total += num # 将求和结果包装为单元素列表,加入当前分组 current_group.append([total]) # 将当前分组加入最终结果 result.append(current_group) # 按照期望格式打印结果 for item in result: print(item)
运行后输出和期望一致:
[[701], [660], [703]] [[700], [660], [704]] [[700], [660], [705]] [[700], [660], [706]] [[698], [659], [701], [695]]
简化实现(可选)
如果想让代码更简洁,可以用Python内置的sum()函数替代最内层的循环,效果完全一致:
result = [] for sub_arr in arr_values: # 用列表推导式直接生成每个一维数组的求和单元素列表 current_group = [[sum(inner_arr)] for inner_arr in sub_arr] result.append(current_group) for item in result: print(item)
内容的提问来源于stack exchange,提问作者baniadam
相关产品推荐
相关产品推荐

