我想避免导入不同的模块,因为这主要是我在网上看到的。我对这段代码感到困惑,而且我真的不知道如何解决它或改进它。这是我到目前为止所做的事情。
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行,这些行都具有这些子列表的平均值。我还要在函数中假设子列表可以有任何等级,但我可以假设列表具有非零值。
Edit1:@ jramirez,你能解释一下与我的不同之处吗?我不怀疑它会更好还是它会起作用,但我仍然不知道如何重新创建这个......不管怎样,谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
代码问题:i
的无关索引;使用//
截断他的平均值(如果你想围绕它,可以使用圆形);并且在循环中使用return,所以它会在第一次平均后停止。你的docstring说“打印”,但你会返回。这实际上是件好事。函数不应打印他们计算的结果,因为这使得答案无法进一步计算。以下是我作为生成器函数编写的内容。
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]
但是,我真的建议学习迭代器,生成器和生成器函数(用yield定义)。