我需要编写一个函数来返回任意给定矩阵中形成对角线的数字之和。
作为一个Python新手我有一个问题。这是我的代码:矩阵中的对角线-python
def diagonal(matrix):
return sum([matrix[i][i] for i in range(len(matrix))])
我一直在尝试了一段时间了,但看不出有什么是错的,因为它总是给我回有关错误说“列表索引超出范围”的报告。
我是不是允许导入numpy
。
任何形式的帮助,提示,意见将不胜感激。
我需要编写一个函数来返回任意给定矩阵中形成对角线的数字之和。
作为一个Python新手我有一个问题。这是我的代码:矩阵中的对角线-python
def diagonal(matrix):
return sum([matrix[i][i] for i in range(len(matrix))])
我一直在尝试了一段时间了,但看不出有什么是错的,因为它总是给我回有关错误说“列表索引超出范围”的报告。
我是不是允许导入numpy
。
任何形式的帮助,提示,意见将不胜感激。
如果你确信你的矩阵是矩形(len(matrix[i])
是在matrix
所有列表相同),那么你只能只要总结你的列表,你的小尺寸云:
def diagonal(matrix):
return sum([matrix[i][i] for i in range(min(len(matrix[0]),len(matrix)))])
len(matrix)
是您的矩阵的第一维,和len(matrix[0])
是第一行向量,它是矩形矩阵的第二维度的维数。
你必须停止当任一指标exceds的相应尺寸,例如,你可以限制矩阵切片:
def diagonal_sum(matrix):
row_size = len(matrix[0])
return sum(row[i] for i, row in enumerate(matrix[:row_size]))
演示:
>>> diagonal_sum([[1,2],[3,4],[5,6]])
5
我觉得diagonal
不用于非定义方矩阵。所以我们最好不要选择两维的min
只让代码返回一些东西。
因此,如何来代替:
def diagonal(matrix):
try:
return sum([matrix[i][i] for i in range(len(matrix))])
except IndexError:
print "Bad Matrix! :("
你确定这个'矩阵'是一个正方形吗? – Ray
无论如何,矩阵是什么?使用'矩阵[i] [i]'表示法假定它是一个列表(或者说,迭代器),应该和@Ray指出的列表大小相同,但是从你的问题来看还不清楚。 – Tibo
是的,我的矩阵是一个列表清单......而且它们的大小相同。 “ – Doe