2013-10-17 76 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