【问题标题】:Matrix creation and assignment Python矩阵创建和赋值 Python
【发布时间】:2020-11-19 11:10:38
【问题描述】:

为什么要创建一个先乘以行然后乘以列的矩阵;

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,很好的答案。

【问题讨论】:

    标签: python matrix append variable-assignment


    【解决方案1】:

    在您的第一个实现中,每一行在内存中都是相同的,因此更改一行中的值会更改所有行中的值。

    >>> myList = [[True]*2]*3
    >>> myList
    [[True, True], [True, True], [True, True]]
    >>> myList[0][0] = False
    >>> myList
    [[False, True], [False, True], [False, True]]
    

    回复this question时解释了这种行为的机制。

    【讨论】:

    • 太棒了:) @Moarram
    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 2019-05-24
    • 2013-11-18
    • 2019-05-13
    • 2017-03-04
    • 2012-11-01
    • 2019-07-23
    • 2012-10-19
    相关资源
    最近更新 更多