如何在Python的二维列表中获取一行的平均值?

4

我是Python的新手,正在处理一个二维列表,不太确定如何获取行的平均值。

例如,我有这个列表:

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个回答

6
如果您愿意,可以使用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,但由于它不是列表,因此无法工作。已经在另一个答案中提供了更接近您的代码的解决方案。


4
这应该能够满足您的需求。希望有所帮助!
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()

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)

0

列表推导式

[sum(r)/len(r) for r in myList]

只是为了打印

[print((sum(r)/len(r)) for r in myList]

不要仅仅为了副作用而使用列表推导式。使用普通的for循环即可,而不是创建一个None值列表,然后再将其丢弃。 - Martijn Pieters
另外:括号不平衡。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接