【发布时间】:2020-05-14 00:15:20
【问题描述】:
我对 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 = sum(s) / len(s) 类型错误:+ 的不支持的操作数类型:'int' 和 'list'
我无法理解我的方法是否完全错误,或者我是否在列表中循环错误。
【问题讨论】:
-
挑剔:使用
if type(x) is list,而不是if isinstance(x, list) -
mylist是一个列表列表,所以你需要一个额外的循环。或者,将所有内容替换为np.array(mylist).mean(axis=-1) -
您有 2 个级别的子列表。你可能期待
print ([[sum(i)/len(i) for i in l] for l in mylist]) -
@Marat 这给了我一个来自 _mean 中的 _method.py 的错误:ret = ret / rcount,然后又是:TypeError: unsupported operand type(s) for /: 'list' and 'int'
-
@piggy 我已经更新了我的答案,它符合您的期望。请看一看。