首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -列表索引超出2d列表的范围

Python -列表索引超出2d列表的范围
EN

Stack Overflow用户
提问于 2014-02-03 02:08:10
回答 3查看 465关注 0票数 1

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

代码语言:javascript
复制
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)

回溯是:

代码语言:javascript
复制
 Traceback (most recent call last):
      File "C:\Users\gaming only\Desktop\PyMap\tiling.py", line 30, in <module>
        test = tileObject.tileMap()
      File "C:\Users\gaming only\Desktop\PyMap\tiling.py", line 19, in tileMap
        self._positions.append([x[i], y[yCounter]])
    IndexError: list index out of range
EN

回答 3

Stack Overflow用户

发布于 2014-02-03 02:17:43

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

票数 0
EN

Stack Overflow用户

发布于 2014-02-03 02:58:43

如果我们有一个包含n项的列表,则该列表的len函数将返回n

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

因此,更改这一行:

代码语言:javascript
复制
    if i < len(x):
        i = i + 1

至:

代码语言:javascript
复制
    if i < len(x) - 1:
        i = i + 1

现在你的代码可以运行了:

代码语言:javascript
复制
[[0, 0], [32, 0], [64, 0], [96, 0], [128, 0], ....
票数 0
EN

Stack Overflow用户

发布于 2014-02-03 03:20:01

我认为你想要这样的东西:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21514217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档