列表赋值索引超出2d数组错误的范围

时间:2017-11-14 18:47:53

标签: python list

我查看了有关类似问题的答案,但无法弄清楚我的问题。我是python的新手,请帮助。

length = 13
breadth = 24
sheet = [ [ 0 for y in range( length ) ] for x in range( breadth ) ]
sheet[length-2][breadth-3] = 1

上面的代码为我提供了列表分配索引超出范围错误。

2 个答案:

答案 0 :(得分:1)

你有list-comprehension错误的方法,它应该是:

length = 13
breadth = 24
sheet = [ [ 0 for x in range( breadth ) ] for y in range( length ) ]
sheet[length-2][breadth-3] = 1

或者您对sheet list的索引编号错误,应该是:

length = 13
breadth = 24
sheet = [ [ 0 for x in range( length ) ] for y in range( breadth ) ]
sheet[breadth-2][length-3] = 1

这两项更正都可以正常使用,但这取决于您定义breadthwidth的内容。

在第一个示例中,list看起来像:

  #breadth --->
[[0,0 ....  0,0],  #width |
 ...               #      |
 [0,0 ....  0,0],  #      \/
]

widthbreadth

在第二个:

  #width --->
[[0,0 ....  0,0],  #breadth |
 ...               #        |
 [0,0 ....  0,0],  #        \/
]

breadthwidth

答案 1 :(得分:1)

您将轴混合在一起,尝试使用

sheet[breadth-3][length-2] = 1

或者,您可以使用numpy更优雅地执行此操作:

import numpy as np

breadth = 5
length = 3

sheet = np.zeros(shape=(breadth, length))
sheet[breadth-3, length-2] = 1

sheet.shape
>>> (5, 3)

sheet
>>> array([[ 0.,  0.,  0.],
   [ 0.,  0.,  0.],
   [ 0.,  1.,  0.],
   [ 0.,  0.,  0.],
   [ 0.,  0.,  0.]])