2016-09-24 41 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對象時,它們都應該是相同的大小。

相關問題