如何用for循环计算二维嵌套列表行和?现有代码出错求助
问题:计算二维嵌套列表每行元素的和
我想要编写一个函数,接收一个二维嵌套列表(表格),返回包含每行元素和的列表。例如调用func([[0.2,0.1],[-0.2,0.1],[0.2,-0.1],[-0.2,-0.1]])应返回[0.3, -0.1, 0.1, -0.3]。已知该表格是二维嵌套列表,每行仅含数字且长度一致。但我编写的代码仅返回列表中的最后一个数值,累加器逻辑存在问题,无法定位错误,代码如下:
num_rows = len(table) num_columns = len(table[0]) result = [] for m in range(num_columns): row = [] for n in range(num_rows): row.append(table[n][m]) row = sum(row) result.append(row) return result
错误分析
- 循环方向搞反:当前代码遍历的是列(
m对应列索引),但需求是计算每行的和,应该遍历行而非列。 - 累加逻辑错误:内层循环中,每次向
row添加元素后立刻调用sum(row)把列表转成数值,后续循环再执行row.append会直接报错(数值类型没有append方法),且这完全不是单行求和的逻辑。 - 结果添加位置错误:
result.append(row)放在了所有循环外面,只会把最后一次循环的结果加入列表,自然只返回单个数值。
正确实现方式
方式一:最简列表推导式(推荐)
直接利用Python内置的sum函数遍历每行求和:
def func(table): return [sum(row) for row in table]
方式二:手动循环累加
如果想手动实现累加逻辑,遍历每行后逐个元素累加:
def func(table): result = [] for row in table: row_total = 0 for num in row: row_total += num result.append(row_total) return result
方式三:保留原变量思路的修正版
如果要沿用你最初定义行数列数的思路,修正后代码如下:
def func(table): num_rows = len(table) result = [] for row_idx in range(num_rows): current_sum = 0 num_cols = len(table[row_idx]) for col_idx in range(num_cols): current_sum += table[row_idx][col_idx] result.append(current_sum) return result
内容的提问来源于stack exchange,提问作者CNG09d
相关产品推荐
相关产品推荐

