2016-09-24 82 views
-1

我有一个Matrix类:如何将列表转换为我自己定制的Matrix类?

class Matrix(object): 
    def __init__(self,row,col): 
     self.row=row 
     self.col=col 
     self.matlist=[] 
     self.create() 
    def create(self): 
     for i in range(self.row): 
      rowlist=[] 
      for j in range(self.col): 
       element=input("Enter Row: {} Col: {} : ".format(i+1,j+1)) 
       rowlist.append(element) 
      self.matlist.append(rowlist) 

    def __str__(self): 
     j=str() 
     for i in range(len(self.matlist)): 
      for j in range(len(self.matlist[i])): 
       j+=str(self.matlist[i][j])+" " 
      j+="\n" 
     return j 

    def __add__(self,y): 
     newmatrix=[] 
     el1=self.matlist 
     el2=y.matlist 

     if (len(el1)==len(el2)) and (len(el1[0])==len(el2[0])): 
      for i in range(len(el1)): 
       newlist=[] 
       for j in range(len(el1[i])): 
        m=el1[i][j]+el2[i][j] 
        newlist.append(m) 
       newmatrix.append(newlist) 
      return newmatrix 

和我已经创建了两个矩阵对象:

m=Matrix(2,2) 
n=Matrix(2,2) 

,然后我添加矩阵:

k=m+n 

它调用__add__()方法,其返回list。但我希望它将其作为Matrix对象返回,以便当我尝试打印它时,将调用__str__()方法,并简单地打印list剂量。是否有某种方法可以将list转换为Matrix

+3

如果你想要一个矩阵,为什么你不能得到返回的方法? –

+0

为什么不创建一个额外的构造函数方法,它将从输入列表创建一个新的矩阵,并将其用作__add__方法的返回值? – AArias

+0

@AArias你如何建议我创建一个额外的构造函数? –

回答

0

像这样的东西应该工作。

首先,类方法来创建一个列表中的矩阵:

class Matrix(object): 
    def __init__(self, row=None, col=None): 
     self.matlist = [] 
     if row and col: 
      self.row = row 
      self.col = col 
      self.create() 

    @classmethod 
    def fromlist(cls, list): 
     res = Matrix() 
     for row in list: 
      res.matlist.append(row) 
     return res 

然后,__add__方法使用该方法返回一个Matrix

def __add__(self,y): 
    newmatrix=[] 
    el1=self.matlist 
    el2=y.matlist 

    if (len(el1)==len(el2)) and (len(el1[0])==len(el2[0])): 
     for i in range(len(el1)): 
      newlist=[] 
      for j in range(len(el1[i])): 
       m=el1[i][j]+el2[i][j] 
       newlist.append(m) 
      newmatrix.append(newlist) 
     return Matrix.fromlist(newmatrix) 

注意,还有一些检查你应该做。例如,此代码不检查所有行的大小是否相同。其他检查你在代码中没有考虑的是,当添加两个Matrix对象时,它们都应该是相同的大小。

相关问题