错误:列表索引必须是整数而不是浮点数

时间:2014-01-07 04:22:04

标签: python python-2.7

下面的代码应该从学生的字典中获取标记列表并计算学生的平均分数。我得到“TypeError:list indices必须是整数,而不是float”错误。

alice = {
    "name": "Alice",
    "homework": [100.0, 92.0, 98.0, 100.0],
    "quizzes": [82.0, 83.0, 91.0],
    "tests": [89.0, 97.0]
}

# Averege function is given below for calculating avg
def average(lst):
    l=float(len(lst))
    total = 0.0
    #code works till here the error occoured below
    for item in lst:
        add = int(lst[item])
        print add
        total+=add
    return total//l

print average(alice['tests'])
print alice['tests']

2 个答案:

答案 0 :(得分:5)

问题出在这一行:

for item in lst:
    add = int(lst[item])

for item in lst遍历列表中的每个item,而不是索引。所以item是列表中float的值。 相反,试试这个:

for item in lst:
    add = int(item)

此外,没有理由强制转换为整数,因为这会使您的平均值变得混乱,因此您可以进一步缩短为:

for item in lst:
    add = item

这意味着for循环可以简化为:

for item in lst:
    total+= item

这意味着我们可以使用内置的sum来进一步缩短它:

total = sum(lst)

由于total现在是浮点数,我们不需要使用双斜杠指定浮点除法,我们不再需要将长度转换为浮点数,因此函数变为:

def average(lst):
    l=len(lst)
    total = sum(lst)
    return total/l

最后,没有理由不在一条容易阅读的文章中做到这一切:

def average(lst):
    return sum(lst)/len(lst)

答案 1 :(得分:3)

for item in lst会让item在每次迭代中获得lst中的每个项目。所以,改变

add = int(lst[item])

add = int(item)

例如,试试这个以便更好地理解

data = ["a", "b", "c"]
for char in data:
    print char

将打印

a
b
c

如果您想获得该项目的当前索引,那么您可以使用enumerate函数

data = ["a", "b", "c"]
for index, char in enumerate(data):
    print index, char, data[index]

<强>输出

0 a a
1 b b
2 c c