繁体   English   中英

在python中创建包含对象的列表列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM