分别计算列表中每个子列表的平均值

问题描述 投票:0回答:3

我对Python真的很陌生,我正在尝试查找列表的平均值。我有一个浮动数字列表,这些列表指示每学期的课程等级,如下所示:

 mylist =  [[[2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0]], [[2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0], [2.67, 2.67, 2.0, 2.0]]]

我想做的是找到每个子列表的平均值,然后再次将其放置为子列表,以便更轻松地访问它。例如,我想要以下内容:

myaverage= [[[2.335],[2.335],[2.335],...]]]

这不是故意的,它只是我在向您展示的列表的这一部分发生的数字。我试图这样做:

for s in mylist:  # for each list
        gpa = sum(s) / len(s)
        allGPA.append(gpa)
        for x in s:  # for each sublist
            x_ = x if type(x) is list else [x]
            myaverage.append(sum(x_) / float(len(x_)))

但我收到此错误:

gpa =总和/ lenTypeError:+不支持的操作数类型:“ int”和“ list”

我不知道我的方法是完全错误的,还是我在列表中循环错误。

python list average
3个回答
0
投票

尝试一下:

from statistics import mean

avg = [[ mean(sub_list) for sub_list in list ] for list in mylist]

如果语法看起来有些混乱,请看list comprehensions


0
投票

这将使您返回列表中的每个列表。

my_average = []
for list in mylist:
    for list1 in list:
        gpa = sum(list1) / len(list1)
        my_average.append(gpa)

0
投票

我认为将您的数据保存在某种集合中,让我们使用字典并创建可读的函数来解析您的数据是明智的。

功能

from collections import defaultdict

def return_averages(gpa_lists):
    """ Takes in a list of lists and returns a dictionary of averages.
     the key will be the level of each sublist."""
    gpa_dict = {number_of_list : outer_list for number_of_list, outer_list in enumerate(gpa_lists)}

    gpa_averages = defaultdict(list)

    for list_number,lists in gpa_dict.items():
        for each_list in lists:
            gpa_averages[list_number].append(sum(each_list) / len(each_list))

    return gpa_averages

用法

return_averages(mylist)

defaultdict(list,
            {0: [2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335],
             1: [2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335,
              2.335]})
© www.soinside.com 2019 - 2024. All rights reserved.