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]]]
您可以使用相同的语法