2013-10-17 103 views
0

我在Python中的數組索引有問題。 在功能ReadFile的崩潰和打印:「列表索引超出範圍」多維數組 - PYTHON

inputarr  = [] 

def readfile(filename): 
    lines = readlines(filename) 
    with open(filename, 'r') as f: 
     i = 0 
     j= 0 
     k = 0 
     for line in f: 
      line = line.rstrip("\n") 
      if not line == '': 
       inputarr[j][k] = line 
       k += 1 
       #print("\tnew entry\tj=%d\tk=%d" % (j, k)) 
      elif line == '': 
       k = 0 
       j += 1 
       #print("new block!\tj=%d\tk=%d" % (j, k)) 
      i += 1 
      processing(i, lines) 
+0

你不能索引到一個長度爲0的列表。你需要給它添加元素。你可能也想看看numpy。 –

回答

0

這個錯誤是由於你想分配給的inputarr的索引是列表的範圍之外。這會導致Python中出現錯誤(與JavaScript之類的其他語言不同,如果您嘗試訪問超出數組初始邊界的索引,則會自動擴展數組)。

您需要預先填寫inputarr,以便它具有正確的形狀和大小,或者您需要隨時動態創建它。我更喜歡後者:

inputarr = [[]] 
#   ^^ Set up the first row 
def readfile(filename): 
    lines = readlines(filename) 
    with open(filename, 'r') as f: 
     i = 0 
     j= 0 
     k = 0 
     for line in f: 
      line = line.rstrip("\n") 
      if not line == '': 
       inputarr[j].append(line) 
#       ^^^^^^^^  Add a new value to the end of the current row of inputarr 
       k += 1 
       #print("\tnew entry\tj=%d\tk=%d" % (j, k)) 
      elif line == '': 
       k = 0 
       inputarr.append([]) 
#    ^^^^^^^^^^^^^^^^^^^ Add a new blank row to inputarr 
       j += 1 
       #print("new block!\tj=%d\tk=%d" % (j, k)) 
      i += 1 
      processing(i, lines) 
+0

謝謝!它工作正常! –

+0

不客氣。如果這解決了您的問題,請考慮將其標記爲「已接受」,以便將來的讀者可以輕鬆分辨。 – Brionius

+0

啊好吧,我忘了,這是我的第一個自己的帖子...直到現在,我已經找到了我想知道的一切,但在這種情況下...... –

0

這是因爲inputarr是空的。例如:

lst = [] 
lst[0] = 1 // error 

你的情況:

inputarr = [] 
j = 0 
... 
inputarr[j][k] = line // inputarr= []; j = 0; so inputarr[0] = ...!ERROR