为什么列表推导不会附加在python中

时间:2015-03-10 00:38:40

标签: python numpy

我创建了一个列表推导,试图模仿3x3矩阵的Matlab单元格。

kis= [ np.zeros(shape=(3,3)) for t in range(1, 5) ]

这就像Matlab中有5个3x3零矩阵的单元格。我可以访问它们

kis[0]
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

我可以将它们修改为

>>> kis[0][0][1]=2
>>> kis[0]
array([[ 0.,  2.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> kis[0][0][1]
2.0

现在有5个元素,比如我想添加第六个元素。

kis.append(np.zeros(shape=(3,3)))

当我尝试访问应该是3x3零的矩阵的第六个单元格时,我有这个错误:

>>> kis[5]

Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    kis[5]
IndexError: list index out of range

那么如何在列表中添加更多3x3矩阵?为什么上述方法不起作用?上面的代码在Python 2.7.9中。

2 个答案:

答案 0 :(得分:3)

kis= [ np.zeros(shape=(3,3)) for t in range(1, 5) ]
#                             only 4 things ^^^^

如果您想要5个元素,则需要range(5)

答案 1 :(得分:1)

>>> kis= [ np.zeros(shape=(3,3)) for t in range(1, 5) ]
>>> len(kis)
4

所以最后一个索引是3.当你:

>>> kis.append(np.zeros(shape=(3,3)))
>>> len(kis)
5

最后一个指数是4.
所以,kis [5]超出了范围