在python3中查找矩阵中包含的值的摘要

时间:2014-05-01 01:45:34

标签: python-3.x matrix integer summary

我想知道如何对矩阵中包含的值进行汇总?我目前有这个代码用于输入我的矩阵:

matrix = []
    loop = True
    while loop:
        line = input()
        if not line: 
            loop = False
        values = line.split()
        row = [int(value) for value in values]
        matrix.append(row)

例如,矩阵[[1,2,3],[4,5,6]]将得到21,所有值的摘要。我不太确定如何做到这一点。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以使用内置的sum()功能。由于您的矩阵不是平的,而是列表,您需要将其展平为sum()

sum(val for row in matrix for val in row)

答案 1 :(得分:1)

您可以使用列表理解:

matrix = [[1, 2, 3], [4, 5, 6]]
sums = sum(y for x in matrix for y in x)
print sums

运行如下:

>>> matrix = [[1, 2, 3], [4, 5, 6]]
>>> sums = sum(y for x in matrix for y in x)
>>> print sums
21
>>> 

或者您可以使用基本的for循环:

matrix = [[1, 2, 3], [4, 5, 6]]
sums = 0
for sub in matrix:
    for value in sub:
        sums+=value

print sums

运行如下:

>>> matrix = [[1, 2, 3], [4, 5, 6]]
>>> sums = 0
>>> for sub in matrix:
...     for value in sub:
...         sums+=value
... 
>>> print sums
21
>>> 

列表理解与双for循环相同,只在一行中:

以下说明:

sums = sum(y for x in matrix for y in x)

让我们从头开始:

我们使用内置函数sum()来计算列表中的所有值:

>>> sum([1, 2, 3, 4]) #Should be 10
10
>>> 

但是,sum()仅适用于展平列表:

>>> sum([[1, 2], [3, 4]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'list'
>>> 

因此,我们需要使用双for循环展平

sum(y for x in matrix for y in x)

for x in matrix基本上取矩阵的每个值,在这种情况下基本上是[1, 2, 3][4, 5, 6]for y in x正在分配y to every value of x[1, 2, 3, 4, 5, 6]。这是我们的扁平化列表。然后我们打电话给sum(),一切都像魔术一样!

答案 2 :(得分:0)

这是一个可以做到的功能

M = [[1,2,3],[4,5,6]]

def matrixSummary( M ):
    rowSums=[]
    for row in M:
        rowSums.append( sum( row ))
    return sum( rowSums )
matrixSummary( M )
// Result: 21 //

看起来像CoDEmanX有一个很好的列表理解版本