对 for 循环中的表行求和

Summing rows of a table in a for loop

提问人:CNG09d 提问时间:4/15/2023 最后编辑:S.BCNG09d 更新时间:4/16/2023 访问量:227

问:

我正在尝试创建一个函数,该函数接受一个表并返回一个包含每行总和的列表。 例如: 返回。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]

我知道该表是一个 2D 嵌套列表,每行只包含数字,并且每行的长度相同。

我有这个代码,但它似乎只返回列表中的最后一个数字。蓄能器坏了,但我无法弄清楚我在这里做错了什么。

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
Python for-loop 嵌套列表 nested-for-loop

评论

0赞 pho 4/16/2023
您的代码存在多个问题,这些错误将在一些调试中变得明显。最明显的是,在循环结束后,您只追加到结果一次。您还在内部循环的第一次迭代中设置,因此现在它不再是列表,并且无法在内部循环的下一次迭代中追加到。请参阅 ericlippert.com/2014/03/05/how-to-debug-small-programsrow=sum(row)

答:

0赞 ali khabazian 4/15/2023 #1

您必须循环访问每一行,并将该行的总和追加到结果列表中

#table is for example n*m n row
result=[]
for row in table:#  from 0 row to nth row        
    result.append(sum(row))
0赞 S.B 4/15/2023 #2

如果这是一件非常简单的事情,可以做列表推导:

def func(lst):
    return [sum(row) for row in lst]

或者它是等效的方法:map()

def func(lst):
    return list(map(sum, lst))

注意:在纯 Python 中,这已经足够了,但如果您需要对多维数组进行快速操作,请考虑改用 Numpy

0赞 Programmer-RZ 4/16/2023 #3

一个简单的嵌套 for 循环就可以了。列表理解也可以,但我个人不喜欢它。

result = []

for row in table:
    sum_of_each_row = 0

    for value in row:
        sum_of_each_row += value

    result.append(sum_of_each_row)

输出:

[0.30000000000000004, -0.1, 0.1, -0.30000000000000004]

基本上,我们遍历表中的每一行,然后遍历该行的每个值。将值和它相加到结果列表中。append()

注意:它返回 0.30000000000000000004 的原因是 python 中的简单舍入问题。