我在Python中编写一个函数,它接受一系列数字列表并打印每行的平均值。但是当我这样做时,它打印答案,然后给出一个错误块,我无法在python文档网站上找到相关信息。
def avg(lst):
"""lst is a list that contains lists of numbers; the
function prints, one per line, the average of each list"""
count = 0
while count<=(len(lst)):
print(sum(lst[count])/(len(lst[count])))
count = count + 1
当使用lst [[95,92,86,87],[66,54],[89,72,100],[33,0,0]]运行时,它产生的输出为:< / p>
>>> avg([[95, 92, 86, 87], [66, 54], [89, 72, 100], [33, 0, 0]])
90.0
60.0
87.0
11.0
Traceback (most recent call last):
File "<pyshell#38>", line 1, in <module>
avg([[95, 92, 86, 87], [66, 54], [89, 72, 100], [33, 0, 0]])
File "<pyshell#37>", line 7, in avg
print(sum(lst[count])/(len(lst[count])))
IndexError: list index out of range
答案是正确的,但我不确定为什么会出现这种错误。有什么想法吗?
编辑:在计数时更改&lt;(len(lst)+1):to count while&lt; =(len(lst)):仍然产生相同的错误
答案 0 :(得分:3)
你有这个:
while count<(len(lst)+1):
你将超越列表的末尾。
你的循环对列表中的每个项目进行迭代(给出正确的输出),然后再做一次,导致错误。
摆脱+1
。
答案 1 :(得分:2)
您也可以使用for循环而不是while循环;除了删除fencepost错误的机会之外,代码更容易阅读(IMO):
def avg(lst):
for l in lst: print(sum(l) / len(l))
avg([[95, 92, 86, 87], [66, 54], [89, 72, 100], [33, 0, 0]])
答案 2 :(得分:0)
通过将您的功能定义为:
,您可以实现所需的功能mean = lambda x: sum(x) / float(len(x))
avg = lambda x: map(mean, x)
将其测试为:
>>> avg([[95, 92, 86, 87], [66, 54], [89, 72, 100], [33, 0, 0]])
[90.0, 60.0, 87.0, 11.0]
由于行while count<(len(lst)+1):
中的逐个错误,导致索引超出范围错误。条件应该是while count<(len(lst)):
。