2015-10-08 105 views
0

所以問題是:平均成績(成績列表)返回列表成績列表中的所有學生的平均成績,其中內部列表包含學生ID和成績。使用嵌套列表計算python的平均值

這是我迄今爲止...但我不知道怎麼去第2個數字爲每個列表以獲得平均:/

grade_list=[['001',20],['002',45],['003',56]] 
for i in grade_list: 
    i= sum(i)/3 
print (i) 

回答

4

你可以試試,列表理解

grade_list=[['001',20],['002',45],['003',56]] 
avg = sum([e[1] for e in grade_list])/len(grade_list) 
print(avg) 

40.333333333333336

,或者您可以使用for廁所p

grade_list=[['001',20],['002',45],['003',56]] 
sumV = 0 
for grade, value in grade_list: 
    sumV += value 

print(sumV/len(grade_list)) 

40.333333333333336

或者使用mapitemgetter

from operator import itemgetter 
grade_list=[['001',20],['002',45],['003',56]] 
avg = sum(map(itemgetter(1),grade_list))/len(grade_list) 
print(avg) 

40.333333333333336

或使用mean如果是蟒蛇> = 3.4

from statistics import mean 
from operator import itemgetter 
grade_list=[['001',20],['002',45],['003',56]] 
print(mean(map(itemgetter(1),grade_list))) 

40.333333333333336

或者,你可以使用reduce

from functools import reduce 
from operator import itemgetter 
grade_list=[['001',20],['002',45],['003',56]] 
print(reduce(lambda x, y: x + y/len(grade_list), map(itemgetter(1),grade_list), 0)) 

40.333333333333336

或者用pandas

import pandas as pd 
grade_list=[['001',20],['002',45],['003',56]] 
df = pd.DataFrame(grade_list) 
print(df.mean(axis=0)[1]) 

40.3333333333

0

使用列表索引。例如,用您的代碼中的變量i替換爲i [1](不是for循環,無論您在裏面調用什麼)。這將讓你的循環看看列表中的SECOND元素,即成績。現在它只是看整個列表。

此外,您的代碼已關閉。你想通過列表中的所有第二個元素,然後通過元素的總數分裂,所以

average=0 
for l in grade_list: 
    average += l[1] 
average/=len(grade_list) 
print average 

記住,列表索引從0開始。

1

這裏有一種方法:

grade_list = [['001', 20], ['002', 45], ['003', 56]] 
total = 0 
for i in grade_list: 
    total += i[1] 
average = total/len(grade_list) 
print(average) 
0
>>> grade_list=[['001',20],['002',45],['003',56]] 

>>> print(round(sum([sublist[1] for sublist in grade_list ])/len(grade_list),2)) 

40.33