在python中的列表列表上执行行和列总和

时间:2018-12-14 19:15:45

标签: python

我想在python中计算矩阵的行和列总和;但是,由于信息安全要求,我无法使用任何外部库。因此,为了创建矩阵,我使用了一个列表列表,如下所示:

matrix =  [[0 for x in range(5)] for y in range(5)]
for pos in range(5):
    matrix[pos][pos]=1
matrix[2][2]= 0

现在我要做的是执行矩阵的rowum和column sum。我知道如何进行总和,这很容易:

sum(matrix[0])

但是如果我想进行列总和怎么办?除了通过for循环,la

强制强行实现之外,还有其他更优雅,更pythonic的方式来实现这一点
sumval = 0
for pos in range(len(matrix[0])):
    sumval = matrix[pos][0] + sumval

这可以工作,但根本不是pythonic。

有人可以帮我吗?

4 个答案:

答案 0 :(得分:3)

colsum = sum(row[0] for row in matrix)

不过,对于其他关注此问题的人来说,这确实是numpy最好的任务。但是,OP不允许使用外部库。

答案 1 :(得分:2)

我建议:

s = 0
for row in matrix:
    s += row[0]

与您所做的相同,但可读性更高。

使用类似的东西

s = sum([row[0] for row in matrix])

也是可读的,但速度较慢,因为您需要执行一次传递来收集row [0]元素,然后进行第二次求和。

答案 2 :(得分:1)

您可以使用:

sum([matrix[i][0] for i in range(len(matrix[0]))])

答案 3 :(得分:0)

我可以建议定义一种按行计算总和的方法,该方法返回总和列表:

def sum_rows(matrix):
  return [sum(row) for row in matrix]

然后定义一个在转置矩阵上调用sum_rows(matrix)的方法:

def sum_cols(matrix):
  return sum_rows(map(list, zip(*matrix)))

用于转置矩阵:Transpose list of lists

替代的转置:

def sum_cols_alt(matrix):
  return [ sum(row[i] for row in matrix) for i, _ in enumerate(matrix) ]