TypeError:迭代元组列表时,'float'对象不可下标访问

1 投票
1 回答
6324 浏览
提问于 2025-04-17 17:08

我正在为课堂编写我的第一个程序,这个程序有四个功能,其中一个是 main()

第一个功能会提示用户输入一个文件名,然后打开这个文件。接着,main() 会再提示用户选择文件中的一列,以便知道要处理哪些数据。

第二个功能会生成一个元组的列表,每个元组包含该列的一行数据和对应的日期(日期在文件的第一列,也就是第0列)。第三个功能应该查看第二个功能生成的元组列表中的日期,并计算每个月的数据平均值(因为每个月可能有多行数据)。在这里,我遇到了一个错误: TypeError: 'float' object is not subscriptable

这是我的第三个功能:

def average_data(list_of_tuples):

    month_int = 2
    values_to_average_int = 0.0
    data_avg_int = 0.0
    average_divisor_int = 1
    list_of_month_average_tuples = []
    val = 0

    for val in list_of_tuples:
        #month_val = int(val[0][5:7])
        if val[0][5:7] == month_int:
        #if month_val == month_int:
            values_to_average_int += val[1]
            average_divisor_int += 1
            print(values_to_average_int)

        else:
            data_avg_float = float(values_to_average_int / average_divisor_int)
            month_yr_date_str = val[0][5:7] + '-' + val[0][:4]
            month_average_tuple = (data_avg_int, month_yr_date_str)
            list_of_month_average_tuples.append(month_average_tuple)
            #list_of_month_average_tuples(data_avg_int, month_yr_date_str) 
            month_int -= 1
            if month_int == 0:
                month_int = 12
            print(list_of_month_average_tuples)
    return list_of_month_average_tuples

我该如何修正我现在遇到的 TypeError 错误呢?

1 个回答

0

你正在遍历一些元组,并把当前的元组赋值给 val。要访问 val 中的值,只需要用一对括号,而不是两对,因为这个元组不是二维的。也就是说,应该用 val[5:7],而不是 val[0][5:7]

另外,在你提到的 for 循环之前,你把 val 赋值为 0。这样做是不好的,因为这会让 val 的意思变得模糊。

想了解更多关于 Python 的 for 循环,可以在 这里查看。

撰写回答