首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python: TypeError:'float‘对象不可订阅

Python: TypeError:'float‘对象不可订阅
EN

Stack Overflow用户
提问于 2015-03-24 08:45:59
回答 3查看 22.5K关注 0票数 1
代码语言:javascript
运行
复制
def get_data(fp):
    data = []
    for line in fp:
        line_list_ints = [int(number) for number in line.split()]
        data.append(line_list_ints)
    return data

def calculate_grades(data):
    for line in data:
        total_points = sum(line[1:6])
        grade = get_grade(total_points)
        data.insert(0,total_points)
        data.insert(1,grade)
    return data

我得到了TypeError:'float‘对象是不可订阅的第10行。我不明白为什么,因为我在将数字附加到数据列表之前将它们转换为整数。有人能帮上忙吗?我说得够清楚了吗?

EN

回答 3

Stack Overflow用户

发布于 2015-03-24 08:59:11

问题在于,您在使用calculate_grades中的data.insertdata列表进行迭代时修改了该列表。这导致循环的第二次迭代将上一次迭代的grade值视为line,而不是它期望的整数列表。

我不完全理解你想做什么,所以我不能直接建议一个解决方案。也许您应该为输出创建一个单独的列表,或者在适当的位置修改line,而不是在data中插入新的项。

票数 1
EN

Stack Overflow用户

发布于 2015-03-24 09:02:29

具体问题是因为数据(最终)中存在浮点数。

代码语言:javascript
运行
复制
for line in data:
    total_points = sum(line[1:6])
    grade = get_grade(total_points)
    data.insert(0,total_points)
    data.insert(1,grade)

因为你把它插入到你的列表中,作为‘等级’

一般的问题是,你在迭代的同时修改了列表('data'),这是一个坏主意--你的逻辑充其量是很难读懂的,而且很容易永远循环。

票数 1
EN

Stack Overflow用户

发布于 2015-03-24 08:50:20

嗯,问题是第10行的部分line[1:6],变量line是一个浮点型的,所以你不能带子列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29223059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档