0

我定义了一个名为 Space 的类,用于表示 9x9 板上的空间。我想在程序开始时生成 81 个实例,方法是将它们分配给我打算用作二维数组的列表元素。

这是课程:

class Space:
    def __init__(self, x_coord, y_coord):
        self.row = x_coord
        self.column = y_coord

这是我将实例分配给列表(也称为空间)的尝试之一:

for i in xrange(1,9):
   for j in xrange(1,9):
        space[i][j] = Space(i,j)

我的目标是能够使用列表索引引用实例,就好像它们是坐标一样,即space[1][2].value = 3

我正在尝试做的事情可能吗?有没有更好的方法来批量生成实例?谢谢!

编辑:(我在下面的回复以更易读的形式)

脚本运行,但是当我尝试在命令提示符中访问它时,我的列表似乎没有定义

>>> space[1][2].value = 3
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'space' is not defined
>>> space[1][1]
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
NameError: name 'space' is not defined
4

2 回答 2

2

听起来您永远不会创建space要用来保存Space对象的列表。这是一种方法,从一个空列表开始,然后将值附加到列表中:

space = [] # initially empty list
for i in range(9):
    column = [] # create an empty list to hold a column of values
    for j in range(9):
        column.append(Space(i, j)) # add the object to the column
    space.append(column) # add the column to the outer list

一个更干净、更“Pythonic”的解决方案是使用嵌套列表推导,如 isedev 的回答:

space = [[Space(i, j) for j in range(9)] for i in range(9)]

最后一点,在代码中对不同的事物使用相同的词,只是大小写不同可能是个坏主意。可以使用一个名为的变量foo来保存单个Foo实例,但更好的名称将表明该实例的用途,例如foo_for_frobbing. 在您的情况下,board可能是比space您的Space实例列表更好的名称。

于 2013-01-29T01:04:45.437 回答
0

您必须使用基于 0 的索引,但这将实现您想要的:

space = [[Space(i,j) for j in range(9)] for i in range(9)]
于 2013-01-28T23:31:02.577 回答