我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
我想定义一个没有初始化长度的二维数组,如下所示:
Matrix = [][]
但这给出了一个错误:
IndexError:列表索引超出范围
当前回答
在Python中,您将创建一个列表列表。您不必提前声明维度,但可以这样做。例如:
matrix = []
matrix.append([])
matrix.append([])
matrix[0].append(2)
matrix[1].append(3)
现在矩阵[0][0]==2,矩阵[1][0]==3。您还可以使用列表理解语法。本示例使用它两次来构建“二维列表”:
from itertools import count, takewhile
matrix = [[i for i in takewhile(lambda j: j < (k+1) * 10, count(k*10))] for k in range(10)]
其他回答
这是一个来自C、CPP和Java背景的初学者的代码
rows = int(input())
cols = int(input())
matrix = []
for i in range(rows):
row = []
for j in range(cols):
row.append(0)
matrix.append(row)
print(matrix)
为什么这么长的代码,在Python中也是如此?
很久以前,当我不熟悉Python时,我看到了编写2D矩阵的单行答案,并告诉自己我不会再在Python中使用2D矩阵。(这些单行很吓人,它没有告诉我Python在做什么。还要注意,我不知道这些短手。)
要声明一个零(1)矩阵:
numpy.zeros((x, y))
e.g.
>>> numpy.zeros((3, 5))
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
或numpy.ones((x,y))例如
>>> np.ones((3, 5))
array([[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])
甚至三维都是可能的。(http://www.astro.ufl.edu/~warner/prog/python.html请参见-->多维数组)
如果您想创建一个二维矩阵,其维度由两个变量定义,并使用其所有元素的默认值对其进行初始化。您可以使用以下简单语法
n_rows=3
n_cols=4
aux_matrix= [[1]*n_cols]*n_rows
你应该列出一个列表,最好的方法是使用嵌套的理解:
>>> 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
这就是我通常在python中创建2D数组的方式。
col = 3
row = 4
array = [[0] * col for _ in range(row)]
与在列表理解中使用两个for循环相比,我发现这种语法很容易记住。