试图创建一个空网格

时间:2014-01-14 16:20:44

标签: python python-2.7

class WorldMap (object):
def __init__ (self, width, height):
    self.width = width
    self.height = height
    world = []
    for i in range(self.width):
        world.append(None)
        for j in range(self.height): 
                                world[i].append(None)


class WorldMap(object):
def __init__(self, width, height):
    self.width = width
    self.height = height
    self.map = [[None for x in range(self.width)] for y in range(self.height)]
  1. 第二个成功创建了一个网格。我不明白为什么第一个代码不起作用。
  2. 要创建包含列表的空网格,我尝试在第一个代码中使用None'',但都不起作用。为什么第一个代码中使用的''None都不正确?

4 个答案:

答案 0 :(得分:3)

在您的第一个代码中,外部i循环:

world = []
for i in range(self.width):
    world.append(None)

创建None的列表:

world == [None, None, None, ...]

因此在内部j循环中,当您调用

world[i].append(None)
你打算打来电话:

None.append(None)

并且您无法附加到None!外循环应该是:

world.append([]) # an empty list

然后内部循环将适用于您想要放入这些列表中的任何内容(None""等)。

值得注意的是,第二个版本比第一个版本更整洁,(显然!)错误的可能性较小。但是,一点点改进(因为您从未使用xy):

self.map = [[None for _ in range(width)] for _ in range(height)]

答案 1 :(得分:0)

在第一个循环的第一个代码中,您应该添加一个空列表而不是None。 另外第二个版本更好。

答案 2 :(得分:0)

我们假设网格大小为:

size = 4

现在,我们正在制作一个空网格:

grid = []

for y in range(size): grid = grid + [[]] for x in range(size): grid[y] = grid[y] + [0]

当你现在打电话给grid时,你应该得到: [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

答案 3 :(得分:-1)

那呢?

网格= [[0] * 20] * 20