未正确分配值的列表列表

2024-09-29 00:16:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个基本的python程序,它最终将尝试与矩阵一起使用,但是我遇到了一个我无法理解的问题。你知道吗

当设置0'th列表的0'th元素时,程序将第一个列表的0'th元素分配给相同的值(在本例中是一个)

它没有理由这么做,因为程序没有导入的模块或任何其他应该影响我已经写的东西

请帮忙

class Matrix(object):

    def createMatrix(self):     
        self.values = [1, 2, 3, 4]
        self.rows = 2
        self.coloms = 2

        self.colomList = [0] * self.coloms
        self.matrix = [self.colomList] * self.rows

test = Matrix()
test.createMatrix()

print(test.matrix)
test.matrix[0][1] = 1
print(test.matrix)

Tags: testself程序元素列表矩阵matrixrows
1条回答
网友
1楼 · 发布于 2024-09-29 00:16:05

您正在创建一个列表[0, 0],然后将同一个列表分配给两行。试试这个(注意“columns”的正确拼写):

def create_matrix(self):
    # self.values = [1, 2, 3, 4]
    self.rows = 2
    self.columns = 2

    self.matrix = [[0 for _ in range(self.columns)] for _ in range(self.rows)]

这只是一个建议,但您可能还希望更改方法以接受宽度和高度的参数,并在实例化对象时使用^{}方法来执行所有这些操作:

class Matrix(object):
    def __init__(self, width=2, height=2):
        self.width = width
        self.height = height
        self._matrix = [[0 for _ in range(width)] for _ in range(height)]

print(Matrix()._matrix)      # uses default values: [[0, 0], [0, 0]]
print(Matrix(4, 3)._matrix)  # [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

作为进一步的改进,我们可以看到宽度和高度取决于self._matrix,因此我们可以动态计算它们,而不是将它们存储为属性,以确保它们不会失去同步:

class Matrix(object):
    def __init__(self, width=2, height=2):
        self._matrix = [[0 for _ in range(width)] for _ in range(height)]

    def height(self):
        return len(self._matrix)

    def width(self):
        return len(self._matrix[0])

print(Matrix(4, 3).width())   # 4
print(Matrix(4, 3).height())  # 3

相关问题 更多 >