类型错误:'float'对象不可下标--



我想计算文本中每三行数据的平均值。错误如下:

Traceback (most recent call last):
File "/home/code/test1.py", line 7, in <module>
lines = sum(lines[i:i+3])/3
TypeError: 'float' object is not subscriptable
with open('/home/data/NB_accuracy_score.txt', 'r') as f:
lines = f.readlines()
lines = [line.strip().split('t') for line in lines]
lines = [line[1] for line in lines]
lines = [float(line) for line in lines]    
for i in range(0, len(lines), 3):
lines = sum(lines[i:i+3])/3
with open('/home/data/NB_accuracy_score.txt', 'a') as f:
f.write('{}t{}n'.format('average', lines))

文本内容和格式如下:

Column2 0.8706781511585587
Column3 0.8781303616921717
Column4 0.9750610907956535
Column5 0.8173341883156271
Column6 0.8251156825704927
Column7 0.9717335921387844
Column8 0.8588412679156341
Column9 0.8584079998613542
Column10    0.9994454168905218
Column11    0.779847836259337
Column12    0.8211296164711184
Column13    0.8471776918944213
Column14    0.7776295038214243
Column15    0.7964853295436821
Column16    0.8513024037711652
Column17    0.7580284570458051
Column18    0.8333651063239805
Column19    0.8280272438952531
Column20    0.705100431534982
Column21    0.8970728410252855
Column22    0.7650993916916518

我如何改进我的代码,使结果是正确的?

for循环中覆盖lines变量:lines = sum(lines[i:i+3])/3。在第二次迭代期间,lines是一个浮点数,因此尝试运行lines[i:i+3]将抛出错误(即,您不能执行1.23[0:3])。

要解决这个问题,请使用lines以外的变量名。下面,我将变量重命名为average

for i in range(0, len(lines), 3):
average = sum(lines[i:i+3])/3
with open('/home/data/NB_accuracy_score.txt', 'a') as f:
f.write('{}t{}n'.format('average', average))

line ">

sum(lines[i:i+3])/3

是浮点数,并且您正在使用索引语法,索引语法适用于可下标对象,如字符串或列表。你不能这样做:lines[i:i+3]如果lines是浮点数,错误说明是这样的。如果你理解了这个错误,你以后就会更容易理解其他类似的错误。

最新更新