2014-09-29 133 views
-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) 

同样,我很新,这对循环行话是相当混乱给我,所以如果有人可以帮我把它这样的,比如说,牌号列表输出应该是一个包含不同线路平均值。所以如果对于lst我插入了grades = [[95,92,86,87], [66,54], [89,72,100], [33,0,0]],它将有4行都具有这些子列表的平均值。我也想在函数中假设子列表可以有任何数量的等级,但是我可以假设这些列表具有非零值。

编辑1:@ jramirez,你能解释一下我做的不同吗?我不怀疑它是更好还是可以工作,但我仍然不知道如何自己重新创建这个...无论如何,谢谢。

回答

0

我想这是你想要的东西:

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) 

结果:

Average for [95, 92, 86, 87] is = 90.0

Average for [66, 54] is = 60.0

Average for [89, 72, 100] is = 87.0

Average for [33, 0, 0] is = 11.0

0

您的代码存在问题:i的无关索引;使用//截断他的比例(如果你想围绕它使用round);并在循环中使用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]

要返回一个列表,改变功能的机构(初级版)

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

或(更先进,使用列表理解)

return [sum(glist) /len(glist) for glist in gradelists] 

但是,我真的推荐学习迭代器,生成器和生成器函数(以收益定义)。

相关问题