我已经定义了一个名为Space的类,用于表示9x9板上的空间。我希望在程序开头生成81个实例,方法是将它们分配给我打算用作2D数组的列表元素。
这是班级:
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
答案 0 :(得分: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”的解决方案是使用嵌套的list comprehensions,如isedev的回答:
space = [[Space(i, j) for j in range(9)] for i in range(9)]
最后要注意的是,对于代码中的不同内容,使用相同的单词只有大小写差异可能是一个坏主意。可以使用名为foo
的变量来保存单个Foo
实例,但更好的名称将指示实例的用途,例如foo_for_frobbing
。在您的情况下,对于board
个实例列表,space
可能比Space
更好。
答案 1 :(得分:0)
您必须使用基于0的索引,但这将达到您想要的效果:
space = [[Space(i,j) for j in range(9)] for i in range(9)]