如何在python中获取2D列表中行的平均值?

时间:2016-03-20 06:22:25

标签: python python-3.x

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

4 个答案:

答案 0 :(得分: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 :(得分: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]