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

时间:2016-08-09 06:38:41

标签: python python-3.x

只需执行以下练习题:将“数字方块”作为参数并返回列总和的列表。

e.g

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

结果应为=

[28, 32, 36, 40]

到目前为止我所拥有的:

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命令可能更容易,但无法找到一种干净利用它的方法。

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

3 个答案:

答案 0 :(得分:2)

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

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

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

>>> column_sums(square)
[28, 32, 36, 40]

您也可以使用numpy.sumaxis参数设置为0,即行(即每列的总和):

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您应该将汇总行更改为:

col_sum += square[j][i]

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

但这是我使用sum和列表推导的解决方案:

def column_sums2(square):
    def col(i):
        return [row[i] for row in square]
    return [sum(col(i)) for i in range(len(square))]