2d lis中的Python列表索引超出范围

2024-05-14 21:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个Python呆子,但我不明白为什么这不起作用。我所要做的就是输出一个包含两个值的2d列表[[1,2],[3,4]],我花了一上午的大部分时间试图弄清楚这个问题,所以我只想寻求帮助。在

class Tiling:
    def __init__(self, width, height, tileSize):
        self._width = width
        self._height = height
        self._tileSize = tileSize
        self._numTiles = (width / tileSize) * (height / tileSize)
        self._positions = []


    def tileMap(self):
        i = 0
        yCounter = 0
        x = []
        y = []
        for j in range(0, self._width, 32):
            x.append(j)
        for k in range(0, self._height, 32):
            y.append(k)
        while len(self._positions) < (self._numTiles):
            self._positions.append([x[i], y[yCounter]])
            if self._positions[i][0] == self._width:
                i = 0
                yCounter = yCounter + 1
            if i < len(x):
                i = i + 1

        return self._positions


tileObject = Tiling(800, 608, 32)
test = tileObject.tileMap()
print(test)

回溯是:

^{pr2}$

Tags: inselfforlendefrangewidthheight
3条回答

如果我们有一个包含n项的列表,则返回nlen函数。在

但是由于一个列表的索引,从zero开始,如果我们想遍历它,必须循环到n-1。在

所以改变这一行:

    if i < len(x):
        i = i + 1

收件人:

^{pr2}$

现在您的代码可以运行:

[[0, 0], [32, 0], [64, 0], [96, 0], [128, 0], ....

我想你想要这样的东西:

def tileMap(self):
    self._positions = [ (x, y)
                           for y in range(0, self._height, self._tileSize)
                               for x in range(0, self._width, self._tileSize) ]
    return self._positions

如果发布的代码是正确的,那么只有1个项目被放入y(附加到y的行不在循环中)。在

相关问题 更多 >

    热门问题