下面的代码应该从学生的字典中获取标记列表并计算学生的平均分数。我得到“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']
答案 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