0

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)   
4

2 に答える 2

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)   
于 2013-10-17T14:02:14.390 に答える