Python中的函数给出了奇怪的错误集,但却输出了正确的答案

时间:2014-09-24 19:49:19

标签: python python-3.x

我在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)):仍然产生相同的错误

3 个答案:

答案 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)):