我是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()
答案 0 :(得分:4)
要计算每个学生的平均分数,给定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 :(得分: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()
答案 2 :(得分: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)
答案 3 :(得分:1)
列表理解
[sum(r)/len(r) for r in myList]
仅供打印
[print((sum(r)/len(r)) for r in myList]