为什么这个列表以错误的顺序返回x和y?

时间:2012-03-06 00:01:40

标签: python arrays list grid 2d

我基本上有一个用这个创建的2d网格数组:

def createRoom(self):
    self.room = [[0] * 8 for x in xrange(8)]
    for x in xrange(8):
        self.room[x][0] = 2
        for j in xrange(8):
            self.room[0][j] = 2
            for i in xrange(8):
                self.room[-1][x] = 2
                for n in xrange(8):
                    self.room[n][-1] = 2
    for x in xrange(6):
        self.room[1][x+1] = 1
    for x in xrange(1):
        self.room[2][x+6] = 1
    for x in xrange(1):
        self.room[3][x+6] = 2
    for x in xrange(1):
        self.room[4][x+6] = 2
    for x in xrange(1):
        self.room[3][x+5] = 1
    for x in xrange(1):
        self.room[4][x+5] = 1
    for x in xrange(1):
        self.room[5][x+6] = 1
    for x in xrange(6):
        self.room[6][x+1] = 1
    for x in xrange(5):
        self.room[x+1][1] = 1               

    return self.room

并使用PrettyPrinter看起来像这样:

[   [2, 2, 2, 2, 2, 2, 2, 2],
    [2, 1, 1, 1, 1, 1, 1, 2],
    [2, 1, 0, 0, 0, 0, 1, 2],
    [2, 1, 0, 0, 0, 1, 2, 2],
    [2, 1, 0, 0, 0, 1, 2, 2],
    [2, 1, 0, 0, 0, 0, 1, 2],
    [2, 1, 1, 1, 1, 1, 1, 2],
    [2, 2, 2, 2, 2, 2, 2, 2]]

但是当我想获得self.room [6] [3]时,它会返回1而不是2。

除非我将订单改为self.room [3] [6],为什么要这样做呢?

3 个答案:

答案 0 :(得分:1)

这是你的“房间”。您设置它的方式,它将按行主要顺序进行基于0的索引。

[[2, 2, 2, 2, 2, 2, 2, 2],
 [2, 1, 1, 1, 1, 1, 1, 2],
 [2, 1, 0, 0, 0, 0, 1, 2],
 [2, 1, 0, 0, 0, 1, 2, 2],   # <-- 4th row
 [2, 1, 0, 0, 0, 1, 2, 2],
 [2, 1, 0, 0, 0, 0, 1, 2],
 [2, 1, 1, 1, 1, 1, 1, 2],   # <-- 7th row
 [2, 2, 2, 2, 2, 2, 2, 2]]

room[6][3]是第7行中的第4个元素,即1.

room[3][6]是第4行中的第7个元素,即2.

希望这可以解决问题。

答案 1 :(得分:1)

我只想指出输入

的容易程度
[[2, 2, 2, 2, 2, 2, 2, 2],
 [2, 1, 1, 1, 1, 1, 1, 2],
 [2, 1, 0, 0, 0, 0, 1, 2],
 [2, 1, 0, 0, 0, 1, 2, 2],
 [2, 1, 0, 0, 0, 1, 2, 2],
 [2, 1, 0, 0, 0, 0, 1, 2],
 [2, 1, 1, 1, 1, 1, 1, 2],
 [2, 2, 2, 2, 2, 2, 2, 2]]

比输入您输入的内容。但除此之外,请观察以下输出,也许您会理解。

>>> room[0]
[2, 2, 2, 2, 2, 2, 2, 2]
>>> room[1]
[2, 1, 1, 1, 1, 1, 1, 2]
>>> room[2]
[2, 1, 0, 0, 0, 0, 1, 2]
>>> room[3]
[2, 1, 0, 0, 0, 1, 2, 2]
>>> room[4]
[2, 1, 0, 0, 0, 1, 2, 2]
>>> room[5]
[2, 1, 0, 0, 0, 0, 1, 2]
>>> room[6]
[2, 1, 1, 1, 1, 1, 1, 2]
>>> room[7]
[2, 2, 2, 2, 2, 2, 2, 2]
>>> room[6][0]
2
>>> room[6][1]
1
>>> room[6][2]
1
>>> room[6][3]
1

答案 2 :(得分:0)

self.room[6][3]为1,因为这是您在以下循环中设置的内容:

    for x in xrange(6):
        self.room[6][x+1] = 1