2016-03-20 7 views
3

Ich bin neu in Python und ich arbeite mit einer 2D-Liste und nicht genau sicher, wie man den Durchschnitt der Zeilen erhält.Wie erhält man den Durchschnitt einer Zeile in einer 2D-Liste in Python?

Zum Beispiel habe ich diese Liste:

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

und ich möchte den Mittelwert der ersten und zweiten Reihe bekommen.

Etwas wie folgt aus:

(70 + 80 + 90)/3 = 80

(30 + 40 + 50)/3 = 40

Ich bin der Umsetzung meiner print_student_average Funktion, aber ich bin ein wenig verloren. Jemand sagt mir bitte, was ich falsch mache.

Hier ist mein Code:

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() 

Antwort

3

Dies sollte tun, was Sie wollen. Ich hoffe es hilft!

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

Wenn Sie möchten, können Sie numpy Paket und seine Funktion mean verwenden.

Um die Durchschnittsnote der einzelnen Schüler zu berechnen, da myList, würde sich der Code wie:

import numpy 

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

Beachten Sie, dass axis=1 feststellt, dass die durchschnittliche Berechnung über die Zeilen ist. Mit der Liste in dem gegebenen Beispiel ist die Ausgabe:

80.0 
40.0 

ähnlich Sie den Durchschnitt für jede Prüfung mit der gleichen numpy Funktion erhalten kann:

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

In diesem Fall axis=0 die bekommen Durchschnitt über Spalten und das Ergebnis für die Liste in dem gegebenen Beispiel ist:

50.0 
60.0 
70.0 

über das Problem in Ihrem print_student_average,

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

ist das Hauptproblem. range gibt eine Liste von ganzen Zahlen beginnend mit 0 bis zur Länge der Liste zurück, im Beispiel 2. Mit der for Anweisung iterieren Sie über jeden Wert der Liste von range, und dann versuchen Sie sum über eine ganze Zahl zu verwenden. was nicht funktioniert, da es keine Liste ist. Die Lösung, die Ihrem Code genauer folgt, ist bereits in einer anderen Antwort enthalten.

1

Wie über diese Logik

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

Liste Verständnis [sum(r)/len(r) for r in myList]

nur für den Druck [print((sum(r)/len(r)) for r in myList]

Verwandte Themen