嵌套列表中索引的总和。从单独的列表添加元素

2024-03-28 21:19:04 发布

您现在位置:Python中文网/ 问答频道 /正文

做一个练习题,如下所示:取一个“数字平方”作为参数,并返回列和的列表。在

例如

square = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]

结果应为=

^{pr2}$

到目前为止我所拥有的:

def column_sums(square):
    col_list = []
    for i in range(len(square)): 
        col_sum = 0
        for j in range(len(square[i])): 
            col_sum += square[j]
        col_list.append(col_sum)
    return col_list

所以我想我已经列出了所有的参数,所有的索引都是正确的,但是我被卡住了,因为我得到了一个错误

builtins.TypeError: unsupported operand type(s) for +=: 'int' and 'list'

如果我引用了我认为的列表中的元素,则不应该发生这种情况。在

另外,在这里使用SUM命令可能更容易,但无法找到一种干净地使用它的方法。在

通过索引从单独的列表中添加元素。在


Tags: in元素列表for参数lendefrange
3条回答

它应该是col_sum += square[j][i],因为您想访问位于i位置的列表的j位置的元素。在

您应该将求和线改为:

col_sum += square[j][i]

因为square[j]是j'th行(list),但您需要当前列,即该行中的i'th元素。在

但下面是我使用sum和列表理解的解决方案:

^{pr2}$

一个更简单的解决方案是使用zip将列表列表转置并在每个新的子列表中使用sum

def column_sums(square):
    return [sum(i) for i in zip(*square)]

zip(*square)解压缩列表列表,并连续返回每个列中的所有项(压缩的为元组)。在

^{pr2}$

您也可以使用^{}来实现这一点,方法是将axis参数设置为0,意思是沿行求和(即每列求和):

>>> import numpy as np
>>> square = np.array(square)
>>> square.sum(axis=0)
array([28, 32, 36, 40])

相关问题 更多 >