我想定义一个没有初始化长度的二维数组,如下所示:

Matrix = [][]

但这给出了一个错误:

IndexError:列表索引超出范围


当前回答

这就是词典的用途!

matrix = {}

可以通过两种方式定义键和值:

matrix[0,0] = value

or

matrix = { (0,0)  : value }

结果:

   [ value,  value,  value,  value,  value],
   [ value,  value,  value,  value,  value],
   ...

其他回答

你应该列出一个列表,最好的方法是使用嵌套的理解:

>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]

在您的[5][5]示例中,您正在创建一个包含整数“5”的列表,并尝试访问其第5项,这自然会引发IndexError,因为没有第5项:

>>> l = [5]
>>> l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

使用NumPy,可以如下初始化空矩阵:

import numpy as np
mm = np.matrix([])

然后像这样附加数据:

mm = np.append(mm, [[1,2]], axis=1)

Use:

matrix = [[0]*5 for i in range(5)]

第一个维度的*5有效,因为在这个级别上数据是不可变的。

如果要创建空矩阵,正确的语法是

matrix = [[]]

如果你想生成一个大小为5、填充有0的矩阵,

matrix = [[0 for i in xrange(5)] for i in xrange(5)]

下面是一个用于初始化列表列表的简短符号:

matrix = [[0]*5 for i in range(5)]

不幸的是,将其缩短为5*[5*[0]这样的长度并不能真正起作用,因为您最终会得到相同列表的5个副本,因此当您修改其中一个副本时,它们都会发生变化,例如:

>>> matrix = 5*[5*[0]]
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[4][4] = 2
>>> matrix
[[0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2]]