【问题标题】:Python: TypeError: 'float' object is not subscriptablePython:TypeError:'float'对象不可下标
【发布时间】:2015-03-24 00:45:59
【问题描述】:
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' object is not subscriptable for line 10。我不明白为什么在将数字附加到数据列表之前将它们转换为整数。任何人都可以帮忙吗?我说的够清楚了吗?

【问题讨论】:

  • 你为什么要在线从1切片到6?
  • 我只需要从每行添加点 [1:6] 中的数字
  • 如何进行完整的回溯?

标签: python typeerror


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    因为你将它插入到你的列表中,作为“等级”

    一般问题是您在迭代列表(“数据”)时正在修改它,这是一个坏主意 - 您的逻辑充其量将难以阅读,并且很容易永远循环。

    【讨论】:

    • 另请参阅 - Blckknght 所说的
    【解决方案3】:

    呃,问题出在第 10 行的 line[1:6] 部分。变量 line 是一个浮点数,所以不能使用子列表。

    【讨论】:

    • 我不确定为什么 line 是一个浮点数。这取决于您传递给 calculate_grade 的参数 data 的值。它可能是一个浮点数列表,由于linedata 的一个元素,所以它也是一个浮点数。
    • 能否贴出完整的代码,让我看看调用calculate_grades的代码?
    • fp = open("data.short.txt") data = get_data(fp) grades = calculate_grades(data)
    猜你喜欢
    • 2019-03-02
    • 2015-04-26
    • 2019-05-27
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    相关资源
    最近更新 更多