【问题标题】:Multidimensional arrays - PYTHON多维数组 - PYTHON
【发布时间】:2013-10-17 13:11:10
【问题描述】:

我在 python 中的数组索引有问题。 在函数 readfile 它崩溃并打印:"list index out of range"

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 的列表。您需要将元素附加到它。您可能还想研究 numpy。

标签: python arrays python-2.7 multidimensional-array


【解决方案1】:

此错误是由于您试图分配给超出列表边界的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)   

【讨论】:

  • 不客气。如果这解决了您的问题,请考虑将其标记为“已接受”,以便未来的读者可以轻松判断。
  • 啊,好吧,我忘了,这是我自己的第一篇文章……直到现在,我已经找到了我想知道的所有内容,但在这种情况下……
【解决方案2】:

这是因为inputarr 是空的。例如:

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

在你的情况下:

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

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2010-10-05
    相关资源
    最近更新 更多