2014-09-29 24 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] 

但是,我真的推薦學習迭代器,生成器和生成器函數(以收益定義)。

相關問題