2014-09-26 17 views
1

我正試圖解決從項目歐勒max path sum problem列表索引超出範圍錯誤python

CODE:

def main(): 
     data = [map(int,row.split()) for row in open("Triangle.txt")] 
     print data 
     for i in range(len(data)-2,-1,-1): 
      for j in range(i+1): 
       data[i][j] += max([data[i+1][j],data[i+1][j+1]]) #list out of range error 
     print (data[0][0]) 

if __name__ == '__main__': 
     main() 

的數據值有16名內部列表如下:

[[75], [95, 64], [17, 47, 82], [18, 35, 87, 10], [20, 4, 82, 47, 65], [19, 1, 23, 75, 3, 34], [88, 2, 77, 73, 7, 63, 67], [99, 65, 4, 28, 6, 16, 70, 92], [41, 41, 26, 56, 83, 40, 80, 70, 33], [41, 48, 72, 33, 47, 32, 37, 16, 94, 29], [53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14], [70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57], [91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48], [63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31], [4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23], []] 

而且我在該行獲得list index out of range錯誤:

data[i][j] += max([data[i+1][j],data[i+1][j+1]]) 
IndexError: list index out of range 

如何我可以擺脫這個錯誤嗎?
在此先感謝...

回答

0

問題是data中的最後一項。這是一個空的列表。嘗試刪除它,執行腳本,如下所示:

In [392]: data[-1] 
Out[392]: [] 

In [393]: data = data[:-1] 

In [394]: for i in range(len(data)-2,-1,-1): 
    .....:  for j in range(i+1): 
    .....:   data[i][j] += max([data[i+1][j],data[i+1][j+1]]) #list out of range error 
    .....: print (data[0][0]) 
    .....: 
1074 

爲了完全消除錯誤,而不需要手動更改的data的內容,你可以正確放在第一位讀它,如下所示:

data = [map(int,row.split()) for row in open("Triangle.txt") if row.strip()] 
+0

是的,我刪除最後一個項目後得到最後的答案... – Stuxnet78 2014-09-26 12:01:38