2013-10-18 60 views
2

任何人都可以指出我有什麼問題嗎?Python IndexError:列表分配索引超出範圍

我被卡在newGrid.setValue(n[k][0], n[k][1], List[k])上,試圖將每個座標系的每個x/y值送入一個不同的函數,該函數接受三個參數xy和value。值是打印在網格上的某個位置,x是座標。如果

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

IndexError: list assignment index out of range

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

的問題是,最終,你會出現在被餵食列表索引或者太小,或者太小大。

根據錯誤信息,有問題的一段代碼是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變量傳入

+0

謝謝 - 我發現錯誤是當我確定網格的大小時,我使用了一個If-Elif,並且網格已經初始化爲1 * 1 - 它沒有檢查y座標是否更大,所以coord(2,3)不能傳遞給電網。 –

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

xy0 ,讓你

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

它不存在

+0

'self.listOfRows [X] [Y] = value' 'IndexError:列表索引超出range' –

+0

列表的[I] [0] newGrid.setValue(N [K] [0], n [k] [1],List [k]) 你正在發送一個數組到一個值? – masterzagh

相關問題