You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

代码解释

  1. 分组存储:用元组(货币, 年份)当键,因为列表不能当字典键,元组是不可变类型可以。每个键对应的值是[总和, 个数]的列表。
  2. 遍历统计:逐个处理原列表的子元素,不存在的分组就新建,存在的就更新总和和计数。
  3. 计算平均值:遍历字典,用总和除以个数得到平均值,再转成要求的列表格式,最后保留两位小数和示例输出对齐。

这样跑出来的结果就和你期望的完全一致啦,而且完全没用到Pandas和内置mean函数,纯手动实现~

内容的提问来源于stack exchange,提问作者Marla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:46:52