Function 如何编写一个取一系列数字平均值的函数

Function 如何编写一个取一系列数字平均值的函数,function,for-loop,python-3.x,average,Function,For Loop,Python 3.x,Average,我想避免导入不同的模块,因为这主要是我在网上查找时发现的。我被这段代码困住了,我真的不知道如何修复或改进它。这是我到目前为止得到的 def avg(lst): '''lst is a list that contains lists of numbers; the function prints, one per line, the average of each list''' for i[0:-1] in lst: return (sum(i[0:-1

我想避免导入不同的模块,因为这主要是我在网上查找时发现的。我被这段代码困住了,我真的不知道如何修复或改进它。这是我到目前为止得到的

def avg(lst):
    '''lst is a list that contains lists of numbers; the
    function prints, one per line, the average of each list'''
    for i[0:-1] in lst:
        return (sum(i[0:-1]))//len(i)
再说一次,我是个新手,这个for loops的行话让我很困惑,所以如果有人能帮我得到它,比如说,一个分数列表的输出将是包含平均数的不同行。因此,如果为
lst
I插入
grades=[[95,92,86,87],[66,54],[89,72100],[33,0,0]]
,它将有4行,所有行都具有这些子列表的平均值。我还要在函数中假设子列表可以有任意数量的等级,但我可以假设列表具有非零值


Edit1:@jramirez,你能解释一下这和我的不同之处吗?我不怀疑它是更好的,或者它会起作用,但我仍然不知道如何重新创造自己。。。不管怎样,谢谢你。

我想这就是你想要的:

def grade_average(grades):
    for grade in grades:
        avg = 0
        for num in grade:
            avg += num

        avg = avg / len(grade)

        print ("Average for " + str(grade) + " is = " + str(avg))

if __name__ == '__main__':
    grades = [[95,92,86,87],[66,54],[89,72,100],[33,0,0]]    
    grade_average(grades)
结果:

[95,92,86,87]的平均值=90.0

[66,54]的平均值为60.0

[89,72,100]的平均值为87.0


[33,0,0]的
平均值为=11.0

您的代码存在问题:与
i
无关的索引;使用
/
截断平均值(如果要对其进行舍入,请使用舍入);并且在循环中使用了return,所以它会在第一次平均值之后停止。您的文档字符串显示“打印”,但您返回。这其实是一件好事。函数不应打印它们计算的结果,因为这会导致无法进一步计算答案。下面是我将如何写这个,作为一个生成函数

def averages(gradelists):
'''Yield average for each gradelist.'''
for glist in gradelists:
    yield sum(glist) /len(glist)

print(list(averages(
        [[95,92,86,87], [66,54], [89,72,100], [33,0,0]])))
[90.0,60.0,87.0,11.0]

要返回列表,请将函数体更改为(初学者版本)

或(更高级,使用列表理解)

然而,我真的建议学习迭代器、生成器和生成器函数(用yield定义)

ret = []
for glist in gradelists:
    ret.append(sum(glist) /len(glist))
return ret
return [sum(glist) /len(glist) for glist in gradelists]