Python索引器:列表分配索引超出范围

Python索引器:列表分配索引超出范围,python,Python,有人能告诉我出了什么事吗 我被困在newGrid.setValue(n[k][0],n[k][1],List[k])上,试图将每个坐标的每个x/y的值输入到一个不同的函数中,该函数包含三个参数,x/y和value。值是打印在网格上某个位置的值,x和y是坐标 索引器:列表分配索引超出范围 def网格里程(列表): x=[] y=[] n=[] k=0 最佳值=0 而len(List)>0: 对于范围内的i(len(列表)): x=列表[i][0] y=列表[i][1] n、 追加([x,y]) 如

有人能告诉我出了什么事吗

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

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

def网格里程(列表):
x=[]
y=[]
n=[]
k=0
最佳值=0
而len(List)>0:
对于范围内的i(len(列表)):
x=列表[i][0]
y=列表[i][1]
n、 追加([x,y])
如果x>最佳:
最佳=x
elif y>最佳:
最佳=y
新网格=网格(最佳)
当k<2时:
newGrid.setValue(n[k][0],n[k][1],List[k])
k=k+1
删除列表[0]
删除列表[1]
德尔n[0]
德尔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)
当z>0时:
打印(newGrid.listOfRows[z-1])
z=z-1
类别网格:
定义初始化(self,n):
self.listOfRows=[]
对于范围(n)中的i:
行=[]
对于范围(n)内的j:
行。追加('*'))
self.listOfRows.append(行)
def设置值(自身、x、y、值):
self.listOfRows[x-1][y-1]=值
如果
x
y
0
那就给你

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

它不存在问题在于,最终,您似乎输入了一个太小或太大的列表索引

根据错误消息,有问题的代码是
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
添加值的地方是(我想?):


…这意味着根本问题最终与您传入的
List
变量有关。

self.listOfRows[x][y]=value
indexer:List index超出范围
List[i][0]newGrid.setValue(n[k][0],n[k][1],List[k])您正在将数组发送到值中?谢谢-我在确定网格大小时发现错误,我使用了If-Elif,网格已将自身初始化为1*1-它没有检查y坐标是否更大,因此坐标(2,3)无法传递到网格。
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
self.listOfRows[x - 1][y - 1] = value 
self.listOfRows[-1][-1] = value 
for i in range(len(List)):
    x = List[i][0]
    y = List[i][1]
    n.append([x,y])