Python IndexError:列表赋值索引超出范围

时间:2013-10-18 13:58:47

标签: python

有人能指出我的错误吗?

我卡在newGrid.setValue(n[k][0], n[k][1], List[k])上,试图将每个坐标的每个x / y的值输入到一个不同的函数中,该函数接受三个参数x y和value。值是在网格上的位置打印的内容,x& y是坐标。

self.listOfRows[x - 1][y - 1] = value 
     

IndexError:列表分配索引超出范围

def gridMileage(List):
    x = []
    y = []
    n = []
    k = 0
    best = 0
    while len(List) > 0:
        for i in range(len(List)):
            x = List[i][0]
            y = List[i][1]
            n.append([x,y])
        if x > best:
            best = x
        elif y > best:
            best = y
        newGrid = Grid(best)
        while k < 2:
            newGrid.setValue(n[k][0], n[k][1], List[k])
            k = k + 1
        del List[0]
        del List[1]
        del n[0]
        del n[1]
        newGrid.setValue(n[0], n[0] + 1, math.sqrt((n[0][0] - n[1][0])**2 + (n[0][1] - n[1][1])**2))
        newGrid.setValue(n[1] + 1, n[1], math.sqrt((n[1][0] - n[0][0])**2 + (n[1][1] - n[0][1])**2))
        z = len(newGrid.listOfRows)
        while z > 0:
            print(newGrid.listOfRows[z - 1])
            z = z - 1

class Grid:
    def __init__(self, n):
        self.listOfRows = []
        for i in range(n):
            row = []
            for j in range(n):
                row.append('*')
            self.listOfRows.append(row)

    def setValue (self, x, y, value):
        self.listOfRows[x - 1][y - 1] = value

2 个答案:

答案 0 :(得分:2)

问题是,最终,您似乎正在加入一个太小或太大的列表索引。

根据错误消息,有问题的代码是self.listOfRows[x - 1][y - 1] = value。你可以通过newGrid.setValue(n[k][0], n[k][1], List[k])来调用它。问题不能是List[k],因为那不是造成堆栈跟踪的原因。

因此,这意味着n[k][0]n[k][1]对于newGrid.listOfRows来说太大了。

我会仔细检查你的代码,在该行之前添加print语句来检查这两个值,并仔细检查网格的大小。

由于您似乎向n添加任何值的唯一地点是(我认为?):

for i in range(len(List)):
    x = List[i][0]
    y = List[i][1]
    n.append([x,y])

...这意味着根问题最终是您传入的List变量。

答案 1 :(得分:0)

self.listOfRows[x - 1][y - 1] = value 

如果xy0,该怎么办? 给你的

self.listOfRows[-1][-1] = value 

它不存在