python 用巢狀列表做矩陣加法

2022-08-19 02:21:13 字數 2598 閱讀 2152

寫乙個函式,接收兩個由巢狀列表模擬成的矩陣,返回乙個巢狀列表作為計算結果,要求執行效果如下:

>>> matrix1 = [[1, 1], [-3, 4]]

>>> matrix2 = [[2, -1], [0, -5]]

>>> add(matrix1, matrix2)

[[3, 0], [-3, -1]]

>>> matrix1 = [[1, -2, 3], [-4, 5, 6], [7, -8, 9]]

>>> matrix2 = [[1, 1, 0], [1, -2, 3], [-2, 2, -2]]

>>> add(matrix1, matrix2)

[[2, -1, 3], [-3, 3, 9], [5, -6, 7]]

最初思路是這樣的:

巢狀迴圈遍歷矩陣1的資料,通過index方法獲得行索引和列索引(這裡大錯特錯了),利用索引來取得矩陣2的相同位置的資料,再進行加法。

由於忽略了index方法只能找到第乙個值的索引,導致當矩陣中有重複元素時,會一直用重複元素中的第乙個進行計算。

正確的做法:

直接按照索引遍歷,再用多個下標操作符去取得元素的值。

def

add(matrix1, matrix2):

result =

for row in range(len(matrix1)): #

行索引 row_result =

for column in range(len(matrix1[row])): #

列索引行結果

矩陣結果

return result

這樣寫,只能計算兩個矩陣的加法,我們需要進一步擴充套件這個函式的功能,比如,讓它可以計算任意多個矩陣的加法

只需要改成動態引數,每個位置的結果根據矩陣個數進行相應次數的計算。主體思路不變,仍然是以第乙個矩陣的索引為準,取得其他矩陣對應位置的資料相加。

def add(*args):

result =

num = len(args) #

獲得矩陣個數,方便後面的計算

for row in

range(len(args[0])):

row_result =

for column in

range(len(args[0][row])):

value_result = args[0][row][column] #

儲存單個資料計算結果

for x in range(num - 1): #

進行(矩陣數-1)次加法

value_result += args[x + 1][row][column]

return result

這時,我們還想再完善一下這個函式,矩陣加法要求矩陣的行列數必須保持一致,我們就讓它能夠檢測傳入的矩陣的一致性,並丟擲異常

valueerror:given matrices are not the same size.

再進行計算之前,先檢測合法性,遍歷檢視後續矩陣的行列數是否和第乙個矩陣相同。

這裡,使用filter以資料長度為條件進行篩選,若有被篩出去的資料,就說明矩陣大小不一致。

def add(*args):

result =

num = len(args) #

獲得矩陣個數,方便後面的計算

row_num =len(args[0])

column_num = len(args[0][0]) #

獲得矩陣1的行列數,用於檢測參與計算的矩陣的一致性

try: #

檢測行數是否一致,若有被篩出去的矩陣,說明不一致

if len(list(filter(lambda r: len(r) == row_num, args))) !=num:

raise valueerror('

given matrices are not the same size.')

for x in range(num): #

# 檢測列數是否一致,若有被篩出去的行,說明不一致

if len(list(filter(lambda r: len(r) == column_num, args[x]))) !=row_num:

raise valueerror('

given matrices are not the same size.')

for row in

range(len(args[0])):

row_result =

for column in

range(len(args[0][row])):

value_result = args[0][row][column] #

儲存單個資料計算結果

for x in range(num - 1): #

進行(矩陣數-1)次加法

value_result += args[x + 1][row][column]

return

result

except

valueerror:

raise

python 多維列表(巢狀列表)

python 多維列表 巢狀列表 姓名,年齡,工資 姓名,年齡,工資 姓名,年齡,工資 字串 姓名,年齡,工資 例如 張三,30,2000 str 張三,30,2000 l str.split print l emp list 單個人的資訊 info input 請輸入員工資訊 info list ...

python巢狀列表實現矩陣轉置的理解

code 對矩陣進行轉置 matrix 1,2,3,4 5,6,7,8 9,10,11,12 transposed row i for row in matrix for i in range 4 列表解析先從外層開始,即 for i in range 4 i首先取0,再到內層 row i for ...

Python 巢狀列表展開

問題1 對於列表形如 list 1 1,2 3,4,5 6,7 8 9 轉化成列表 list 2 1,2,3,4,5,6,7,8,9 的問題。python實現 普通方法 list 1 1,2 3,4,5 6,7 8 9 list 2 for in list 1 list 2 print list 2...