我有一个名为House的课程,我想制作一些可以在网格中直观排列的实例:
class House(object):
def __init__(self, row, col):
self.row = row
self.col = col
self.rooms = 0
我想按行和列遍历此网格中House的所有实例:
for row in range(GRIDHEIGHT):
for col in range(GRIDWIDTH):
thisHouse = House()
thisHouse.row = row
thisHouse.col = col
然后在代码中我想遍历已经创建的实例...
for row in range(GRIDHEIGHT):
for col in range(GRIDWIDTH):
??? something something ???
if thisHouse.room =< 1:
do stuff
else:
thisHouse.room = +1
etc
&#34; ???什么东西???&#34;我不确定如何继续,不知何故必须搜索thisHouse的实例(通过thisHouse.row和thisHouse.col我应该考虑)直到与GRIDHEIGHT和GRIDWIDTH中的行和col匹配,希望这是有意义的。我不确定如何做到这一点,到目前为止研究表明_dir()可能有用,但似乎显示属性但不显示属性的内容。
也许&#34; ???什么东西???&#34;应该是......
for thisHouse.row = row and thisHouse.col = col:
但我认为这不会很好。我在这里正在检修大量的代码,所以不能在这一点上测试这一点,所以建议表示赞赏。
答案 0 :(得分:2)
IIUC,你想要达到的目标是:
body
或者您也可以使用双嵌套词典:
import itertools
class House(object):
def __init__(self, row, col):
self._row = row
self._col = col
GRIDHEIGHT = 10
GRIDWIDTH = 10
houses = {(col, row): House(row, col) for col, row in
itertools.product(range(GRIDWIDTH), range(GRIDHEIGHT))}
访问相关的房屋将通过houses = {col: {row: House(row, col) for row in range(GRIDHEIGHT)} for col in range(GRIDWIDTH)}
或houses[(col, row)]
:
houses[col][row]
答案 1 :(得分:1)
你为什么不翻转这个问题?您正在House上存储网格信息,而不是在网格上存储房屋/对象信息。 你可以有一个代表网格的二维数组,然后在每个单元格中,你有你想要的信息,也就是那个单元格中的对象,如果有一个通用的对象集合或者将它们分开就可以了。你有标签屋,宠物,汽车的字典。
一些psudo代码:
for x in grid:
for cell in x:
#here you have the cell:
for obj in cell.objs:
if (obj is House):
do stuff
当然,如果您对自己想要做的事情有更深入的了解,以及有哪些元素可以优化您在单元格内搜索:
for x in grid:
for cell in x:
#here you have the cell:
for h in cell.objs["houses"]:
do stuff
当然,您仍然可以在家庭班级中保存坐标信息。 以这种方式布置数据将允许容易地通过房屋迭代,即使分布不均匀,并且它还允许进行操作,例如找到邻居等。