python嵌套数组,python元组嵌套列表

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: