繁体   English   中英

多维数组-PYTHON

[英]Multidimensional arrays - PYTHON

我在python中遇到数组索引问题。 在函数readfile上它崩溃并打印: “列表索引超出范围”

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)   

发生这种情况是因为inputarr为空。 例如:

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

在您的情况下:

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

此错误是由于您试图分配给列表边界之外的inputarr索引而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)   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM