我需要編寫一個函數來返回任意給定矩陣中形成對角線的數字之和。
作爲一個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