[英]Creating list of lists containing objects in python
我试图将自定义对象放入2d列表中,但我感到非常困惑。 这是我所拥有的:
这是单元格类:
class Cell(object):
def __init__(self, what, cost):
self.what = what
self.parentx = -1
self.parenty = -1
self.f = 0
self.g = 0
self.h = 0
self.cost = cost
和我的插入对象(在其中放置网格/迷宫并将数据放入对象中):
def insertion (r, c, grid):
cellGrid = []
for x in range(0, r):
for y in range(0, c):
if (grid[x][y] == '%'):
what = 0
cost = 100000000
elif(grid[x][y] == '-'):
what = 1
cost = 1
elif (grid[x][y] == '.'):
what = 2
cost = 0
else:
what = 3
cellGrid.append(Cell(what, cost))
return cellGrid
这确实可行,但是我真正想要的是cellGrid是2d列表,就像grid一样,除了它将包含单元对象而不是字符串。 我希望能够将其作为cellGrid[0][0].what
。例如。 我应该如何做到这一点?
如果要这样做,则需要在第一个循环中创建一个“行”以添加到主grid
数组中。 然后,将单元格附加到此行,并将整个行附加到网格。
像这样:
def insertion (r, c, grid):
cellGrid = []
for x in range(0, r):
row = []
for y in range(0, c):
if (grid[x][y] == '%'):
what = 0
cost = 100000000
elif(grid[x][y] == '-'):
what = 1
cost = 1
elif (grid[x][y] == '.'):
what = 2
cost = 0
else:
what = 3
row.append(Cell(what, cost))
cellGrid.append(row)
return cellGrid
使用列表推导来创建一个完全为None
的列表的列表。 将cellGrid初始化更改为:
cellGrid = [ [None for i in range(c)] for j in range(r)]
那你做
cellGrid[x][y] = Cell(what,cost)
完整的代码示例:
def insertion (r, c, grid):
cellGrid = [ [None for i in range(c)] for j in range(r)]
for x in range(0, r):
for y in range(0, c):
if (grid[x][y] == '%'):
what = 0
cost = 100000000
elif(grid[x][y] == '-'):
what = 1
cost = 1
elif (grid[x][y] == '.'):
what = 2
cost = 0
else:
what = 3
cellGrid[x][y] = Cell(what,cost)
return cellGrid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.