我最近开始使用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然后才会显示此消息:
追踪(最近一次呼叫最后一次):
文件“< tmp 1>”,第8行,<模块>
row [i] [j] = [float(item)for line.split()]
IndexError:列表分配索引超出范围
我无法弄清楚问题是什么,我猜这个列表没有填充到它的最大值(我在网上看到它有500.000.000个空格),我看不出有什么问题。当您正在处理的列表为空时出现该错误,但我进行了双重检查并且存在每个文件,但我也尝试过
row[i][j].append(float(item) for item in line.split())
(这是最常见错误的解决方案),它给我一个很长的清单:
<生成器对象< genexpr>在0x000000000XXXXXXX>
(其中X是不同的数字)然后以相同的错误结束。
P.S。如果您需要我正在处理的数据,请询问并上传。
答案 0 :(得分:2)
看起来您的问题非常简单。您可能有一个名为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]]]
您可以使用相同的语法