矩阵创建和赋值 Python
Matrix creation and assignment Python
为什么要像这样创建一个先乘以行再乘以列的矩阵;
class Blíster:
def __init__(self,row,columns):
self.nfil=row
self.ncol=columns
self.__matriu=[[True]*columns]*row
def __getitem__(self,i):
return self.__matriu[i[0]][i[1]]
def __setitem__(self,i,p):
self.__matriu[i[0]][i[1]]= p
不同于追加行,如下所示:
class Blíster:
def __init__(self, rows, columns) :
self.nfil = rows
self.ncol = columns
self.cavitats = []
for i in range(rows) :
self.cavitats.append([True]*columns)
def __getitem__(self, pos) :
return self.cavitats[pos[0]][pos[1]]
def __setitem__(self, pos, p) :
self.cavitats[pos[0]][pos[1]] = p
当我尝试
b = blíster.Blíster(3, 6)
b[1, 2] = False
b[2, 5] = False
b[2, 4] = False
b[1, 3] = False
c = 0
for i in range(3) :
for j in range(6) :
if b[i, j] :
c = c + 1
使用第一种创建矩阵的方法,我得到 c=6
所以它在矩阵中给False赋值了4次以上,我也不知道为什么。如果有人能向我解释一下,我将不胜感激:D
用第二种方法,我得到了c=14,很好的答案。
在您的第一个实现中,每一行在内存中都是相同的,因此更改一行中的值会更改所有行中的值。
>>> myList = [[True]*2]*3
>>> myList
[[True, True], [True, True], [True, True]]
>>> myList[0][0] = False
>>> myList
[[False, True], [False, True], [False, True]]
此行为的机制在对 this question 的回答中进行了解释。
为什么要像这样创建一个先乘以行再乘以列的矩阵;
class Blíster:
def __init__(self,row,columns):
self.nfil=row
self.ncol=columns
self.__matriu=[[True]*columns]*row
def __getitem__(self,i):
return self.__matriu[i[0]][i[1]]
def __setitem__(self,i,p):
self.__matriu[i[0]][i[1]]= p
不同于追加行,如下所示:
class Blíster:
def __init__(self, rows, columns) :
self.nfil = rows
self.ncol = columns
self.cavitats = []
for i in range(rows) :
self.cavitats.append([True]*columns)
def __getitem__(self, pos) :
return self.cavitats[pos[0]][pos[1]]
def __setitem__(self, pos, p) :
self.cavitats[pos[0]][pos[1]] = p
当我尝试
b = blíster.Blíster(3, 6)
b[1, 2] = False
b[2, 5] = False
b[2, 4] = False
b[1, 3] = False
c = 0
for i in range(3) :
for j in range(6) :
if b[i, j] :
c = c + 1
使用第一种创建矩阵的方法,我得到 c=6 所以它在矩阵中给False赋值了4次以上,我也不知道为什么。如果有人能向我解释一下,我将不胜感激:D
用第二种方法,我得到了c=14,很好的答案。
在您的第一个实现中,每一行在内存中都是相同的,因此更改一行中的值会更改所有行中的值。
>>> myList = [[True]*2]*3
>>> myList
[[True, True], [True, True], [True, True]]
>>> myList[0][0] = False
>>> myList
[[False, True], [False, True], [False, True]]
此行为的机制在对 this question 的回答中进行了解释。