我想知道如何对矩阵中包含的值进行汇总?我目前有这个代码用于输入我的矩阵:
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,所有值的摘要。我不太确定如何做到这一点。
谢谢!
答案 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有一个很好的列表理解版本