2016-03-20 10 views
3

我是Python的新手,我正在使用2D列表,並不完全知道如何獲取行的平均值。如何獲得python中的2D列表中的行的平均值?

例如,我有這個名單:

myList = [[70, 80, 90], [30, 40, 50]] 

,我想獲得第一排和第二排的平均值。

像這樣:

(70 + 80 + 90)/ 3 = 80

(30 + 40 + 50)/ 3 = 40

我實施我print_student_average功能,但我有點失落。有人告訴我我做錯了請。

這裏是我的代碼:

def main(): 
    myList = [[70, 80, 90], [30, 40, 50]] 

    print(print_student_average(myList)) 
    print_exam_average(myList) 

def print_student_average(myList): 

    total_sum = [sum(i) for i in range(len(myList))] 
    average = total_sum/3 

    return average 

def print_exam_average(myList): 

    col_totals = [ sum(x)/2 for x in zip(*myList) ] 

    for col in col_totals: 
     print("the average of the exam is: ", col) 


main() 

回答

3

這應該做你想做的。希望能幫助到你!

def main(): 
    myList = [[70, 80, 90], [30, 40, 50]] 

    print(print_student_average(myList)) 
    print_exam_average(myList) 

def print_student_average(myList): 

    return [sum(row)/len(row) for row in myList] 

def print_exam_average(myList): 

    col_totals = [ sum(x)/len(myList) for x in zip(*myList) ] 

for col in col_totals: 
    print("the average of the exam is: ", col) 


main() 
4

如果你願意,你可以使用numpy包及其功能mean

要計算每個學生的平均成績,給予myList,代碼如下所示:

import numpy 

def print_student_average(myList): 
    students_avg = numpy.mean(myList, axis=1) 
    for avg in students_avg: 
     print(avg) 
    return students_avg 

注意axis=1確定平均值是計算過的行。 所提供的列表中的例子中,輸出是:

80.0 
40.0 

同樣,您可以使用相同的numpy的功能得到平均每個考試:

def print_exams_average(myList): 
    exams_avg = numpy.mean(myList, axis=0) 
    for avg in exams_avg: 
     print(avg) 
    return exams_avg 

在這種情況下axis=0得到在列中的平均值爲:

50.0 
60.0 
70.0 

關於您的問題在print_student_average

total_sum = [sum(i) for i in range(len(myList))] 

是主要問題。 range返回從0開始到列表長度的整數列表(在本例中爲2)。使用for語句從range遍歷列表中的每個值,然後嘗試在整數上使用sum,這不起作用,因爲它不是一個列表。更接近您的代碼的解決方案已在另一個答案中提供。

1

這個怎麼樣的邏輯

mylist = [[70,80,90],[30,40,50]] 
avglist = [] 
for x in mylist: 
    temp = 0 
    counter = 0 
    for y in x:  
     temp = temp + y 
     counter = counter + 1 
    avglist.append(temp/counter) 
print(avglist) 
1

列表理解 [sum(r)/len(r) for r in myList]

只是打印 [print((sum(r)/len(r)) for r in myList]