【问题标题】:2d list / matrix in pythonpython中的二维列表/矩阵
【发布时间】:2017-09-08 13:08:30
【问题描述】:

我正在尝试在 python 中创建一个 4x4 矩阵类...

我的矩阵是这样创建的 -

class matrix:
    self.matrix = [[0 for x in range(4)] for y in range(4)]

我曾尝试像这样访问此矩阵中的索引 -

myMatrix = matrix()
print(myMatrix.matrix[0][0])

但是我得到一个错误提示

AttributeError: myMatrix instance has no attribute '__getItem__'

我试过像这样向我的矩阵类添加一个方法-

def getValue(self, x, y):
    return self.matrix[x][y]

但我收到一条错误消息 TypeError: 列表索引必须是整数

即使我尝试 self.matrix[0][0] 它说它们必须是整数,关于如何在 python 中获得简单的二维列表/矩阵功能的任何想法?

我只是希望能够创建一个 4x4 二维列表/矩阵并访问和更改其中的元素?

【问题讨论】:

  • 为什么不使用numpy

标签: python list matrix 2d


【解决方案1】:

你应该先初始化矩阵,使用__init__方法:

class matrix:
    def __init__(self):
        self.matrix = [[0 for x in range(4)] for y in range(4)]

myMatrix = matrix()
print(myMatrix.matrix[0][0]) # => 0

现在你可以创建你的getValue,这对以后使用更好:

class matrix:
    def __init__(self):
        self.matrix = [[0 for x in range(4)] for y in range(4)]
    def getValue(self, x, y):
        return self.matrix[x][y]

myMatrix = matrix()
print(myMatrix.matrix[0][0]) # => 0
print(myMatrix.getValue(0, 0)) # => 0

【讨论】:

    【解决方案2】:

    __init__方法中初始化矩阵,并定义如何在__getitem__中按索引获取元素。

    class matrix:
        def __init__(self):
            self.matrix = [[0 for x in range(4)] for y in range(4)]
    
        def __getitem__(self, item):
            return self.matrix[item]
    
    m = matrix()
    print(m[0][0]) # 0
    

    但是,如前所述,您可以使用numpy 和其他适当的包,除非您需要为矩阵实现一些特殊的额外功能。

    【讨论】:

      最近更新 更多