IndexError:列表分配索引超出范围-带数组的Python


问题内容

我最近开始使用python,但我仍然是该语言的许多新手。这段代码应该打印出一系列意想不到的行(例如:[47.815、47.54、48.065、57.45]),这些行是我从多个文本文件(称为2t1,…,2t19,3t1,…,3t19)输入的以及结束后的文件名。每个文件有80个必须保存的元素(总共〜12000个元素,每个文件〜80行,每行4个元素)

for i in range(2,3):
for j in range(1,19):
    #Open a text file and convert the row content to float:
    for line in open('[Path]/%dt%d.txt' % (i,j)):
    # Ignore comments:
        if not line.startswith('#'):
            # Got a valid data line:
                row[i][j] = [float(item) for item in line.split()]
                print (row[i][j])
    print (' %dt%d \n' %(i,j))

它能够执行我要求的操作,但是直到2t5,然后显示以下消息:

追溯(最近一次通话):

<模块>中第8行的文件“

row [i] [j] = [line.split()中项目的float(item)]

IndexError:列表分配索引超出范围

我真的无法弄清楚问题出在哪里,我想这个列表没有达到最大值(我在网上阅读它有500.000.000个空格),而且我看不出有什么问题。当您正在处理的列表为空时,会出现该错误,但我仔细检查了所有文件,但我也尝试过使用
row[i][j].append(float(item) for item in line.split())
(这是最常见错误的解决方案),它返回了一个很长的列表:

<生成器对象 在0x000000000XXXXXXX>

(其中X是不同的数字)以相同的错误结束。

附言:如果您需要我正在处理的数据,请询问,然后我将其上传。


问题答案:

看来您的问题很简单。您可能有一个名为的列表,row并且试图将值分配给不存在的索引

>>> row = []
>>> row[0] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range

然而,如果你追加一个新的列表到排列表就像我 认为 你想做的事

>>> row = []
>>> row.append([1, 2, 3, 4])
>>> row
[[1, 2, 3, 4]]
>>> row[0][0]
1

这样就可以了。如果您尝试将三层嵌套的东西

>>> row = []
>>> row.append([[1,2,3,4]])
>>> row
[[[1, 2, 3, 4]]]
>>> row[0].append([-1, -2, -3, -4])
>>> row
[[[1, 2, 3, 4], [-1, -2, -3, -4]]]

您可以使用相同的语法