I'm new to Python and I'm working with a 2D list and not exactly sure how to get the average of the rows.
For example I have this list:
myList = [[70, 80, 90], [30, 40, 50]]
and I would like to get the average of the first and second row.
Something like this:
(70 + 80 + 90)/3 = 80
(30 + 40 + 50)/3 = 40
I'm implementing my print_student_average
function, but I'm a little lost. Someone tell me what I'm doing wrong please.
Here's my 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()
If you want, you can use numpy package and its function mean
.
To compute the average mark of each student, given myList
, the code would look like:
import numpy
def print_student_average(myList):
students_avg = numpy.mean(myList, axis=1)
for avg in students_avg:
print(avg)
return students_avg
Note that axis=1
determines that the average is calculate over the rows.
With the list in the example provided, the output is:
80.0
40.0
Similarly, you can get the average for every exam using the same numpy function:
def print_exams_average(myList):
exams_avg = numpy.mean(myList, axis=0)
for avg in exams_avg:
print(avg)
return exams_avg
In this case axis=0
to get the average over columns, and the result for the list provided in the example is:
50.0
60.0
70.0
About the problem in your print_student_average
,
total_sum = [sum(i) for i in range(len(myList))]
is the main problem. range
returns a list of integers starting from 0 to the length of the list, which in the example is 2. With the for
statement you iterate over each value of the list from range
, and then you are trying to use sum
over an integer, which does not work as it is not a list. The solution that follows more closely your code is already provided in another answer.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With