我对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”
我不知道我的方法是完全错误的,还是我在列表中循环错误。
尝试一下:
from statistics import mean
avg = [[ mean(sub_list) for sub_list in list ] for list in mylist]
如果语法看起来有些混乱,请看list comprehensions
这将使您返回列表中的每个列表。
my_average = []
for list in mylist:
for list1 in list:
gpa = sum(list1) / len(list1)
my_average.append(gpa)
我认为将您的数据保存在某种集合中,让我们使用字典并创建可读的函数来解析您的数据是明智的。
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]})