我有一个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__()
的{{1}}方法。但是我希望它将它作为list
对象返回,这样当我尝试打印它时,Matrix
方法被调用,__str__()
剂量只被打印出来。有没有办法将list
强制转换为list
?
答案 0 :(得分: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
对象时,它们的大小应该相同。