python嵌套数组,python元组嵌套列表
写一个函数,接收嵌套列表模拟的两个矩阵,返回一个嵌套列表作为计算结果。要求运行效果如下:
matrix1=[[1,1],[-3,4]]
matrix2=[[2,-1],[0,-5]]
加法(矩阵1,矩阵2)
[[3, 0], [-3, -1]]
matrix1=[[1,-2,3],[-4,5,6],[7,-8,9]]
matrix2=[[1,1,0],[1,-2,3],[-2,2,-2]]
加法(矩阵1,矩阵2)
[[2, -1, 3], [-3, 3, 9], [5, -6, 7]]
最初的想法是这样的:
循环遍历矩阵1的数据,用index方法得到行索引和列索引(这是一个很大的错误),用索引得到矩阵2相同位置的数据,然后相加。
因为index方法只能找到第一个值的索引,所以当矩阵中存在重复元素时,将总是使用重复元素中的第一个进行计算。
正确的方法:
根据索引直接遍历,然后使用多个下标操作符得到元素的值。
defadd(矩阵1,矩阵2):
范围中的行的结果=[](len(matrix 1)):#行索引
范围(len (matrix1 [row])中列的row _ result=[]:#列索引
Row _ result.append(矩阵1[行][列]矩阵2[行][列]) #行结果
Result.append(row_result) #矩阵结果
回送结果
这样,只能计算两个矩阵的相加。我们需要进一步扩展这个函数的功能,比如允许它计算任意个数矩阵的加法。
只需要改成动态参数,每个位置的结果根据矩阵的个数计算相应的次数。主要思路不变,还是以第一个矩阵的索引为标准,加上其他矩阵对应位置的数据。
def add(*args):
结果=[]
Num=len(args) #得到矩阵的个数,方便后面的计算。
对于范围内的行(len(args[0]):
对于列inrange(len(args[0][row]),row _ result=[]:
value _ result=args[0][row][column]#存储单个数据计算结果
范围内的x(编号-1): # Make(矩阵编号-1)加法。
value _ result=args[x 1][行][列]
row_result.append(value_result)
result.append(row_result)返回结果
这个时候我们也想完善这个功能。矩阵加法要求矩阵的行数和列数必须一致,所以我们可以让它检测传入矩阵的一致性并抛出异常。
值错误:给定的矩阵大小不同。
重新计算前,检查合法性,遍历后续矩阵的行数和列数是否与第一个矩阵相同。
这里的filter是以数据长度为条件进行过滤的,如果有过滤的数据,说明矩阵大小不一致。
def add(*args):
结果=[]
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:提高值错误(给定的矩阵大小不同。)对于范围内的x(num):# #检查列数是否一致。如果有筛选出的行,则表示它们不一致。
if len(list(filter(lambda r:len(r)==column _ num,args[x]))!=row_num:raise ValueError(给定的矩阵大小不同。)for row inrange(len(args[0]):
对于列inrange(len(args[0][row]),row _ result=[]:
value _ result=args[0][row][column]#存储单个数据计算结果
范围内的x(编号-1): # Make(矩阵编号-1)加法。
value _ result=args[x 1][行][列]
row_result.append(value_result)
result . append(row _ result)returnresultexceptvaluerror:raise
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。