Python嵌套列表求平均值:匹配前两元素时计算第三元素均值
手动计算嵌套列表分组平均值(不使用Pandas和mean函数)
我最近在做一个练习,要求不能用Pandas DataFrame和内置mean函数,手动计算嵌套列表的分组平均值。具体需求是:当子列表的第一、第二个元素完全匹配时,把这些子列表的第三个元素算平均值,最后整理成新的列表。
示例输入:
mylist = [["USD", 2000, 13.40], ["USD", 2000, 13.68], ["USD", 2001, 13.99], ["EUR", 2000, 10.50], ["EUR", 2000, 11.02]]
期望输出:
avlist = [["USD", 2000, 13.54], ["USD", 2001, 13.99], ["EUR", 2000, 10.76]]
我已经迈出第一步了——从第一个元素生成集合,但接下来有点卡壳,有没有大佬能给个清晰的实现思路和代码?
嗨,这个需求其实用字典来分组就很方便,我给你捋个清晰的步骤,再附上代码:
实现思路
- 用字典来存储分组:把每个子列表的前两个元素(比如
("USD", 2000))作为字典的键,对应的值存两个信息:该组的第三个元素总和、元素个数。 - 遍历原列表,逐个把数据归类到对应的分组里,更新总和和计数。
- 遍历字典,计算每个分组的平均值,再整理成要求的嵌套列表格式。
完整代码
mylist = [["USD", 2000, 13.40], ["USD", 2000, 13.68], ["USD", 2001, 13.99], ["EUR", 2000, 10.50], ["EUR", 2000, 11.02]] # 初始化字典,用来存分组的总和和计数 group_data = {} for item in mylist: key = (item[0], item[1]) value = item[2] if key not in group_data: # 第一次遇到这个分组,初始化总和和计数 group_data[key] = [value, 1] else: # 分组已存在,累加总和,计数+1 group_data[key][0] += value group_data[key][1] += 1 # 生成结果列表 avlist = [] for key, (total, count) in group_data.items(): avg = round(total / count, 2) # 保留两位小数和示例一致 avlist.append([key[0], key[1], avg]) print(avlist)
代码解释
- 分组存储:用元组
(货币, 年份)当键,因为列表不能当字典键,元组是不可变类型可以。每个键对应的值是[总和, 个数]的列表。 - 遍历统计:逐个处理原列表的子元素,不存在的分组就新建,存在的就更新总和和计数。
- 计算平均值:遍历字典,用总和除以个数得到平均值,再转成要求的列表格式,最后保留两位小数和示例输出对齐。
这样跑出来的结果就和你期望的完全一致啦,而且完全没用到Pandas和内置mean函数,纯手动实现~
内容的提问来源于stack exchange,提问作者Marla
相关产品推荐
相关产品推荐

