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

Python中如何对列表对象的attributions属性逐元素求平均?

逐元素求二维列表均值的最优方法

这个问题我碰到过好几次,刚好可以给你梳理下最优的解决思路~首先得澄清一个点:如果你的attributions是普通Python列表的话,直接用sum(a.attribution for a in attrs)其实是错误的——因为Python内置的sum对列表做的是拼接操作,比如你例子里的两个列表会被拼成[[2,1],[4,6],[4,3],[8,8]],根本不是元素级相加。如果你的现有代码能得到正确结果,大概率是attributions是numpy数组(numpy的sum支持元素级运算)。

下面分两种场景给你最优方案:

场景1:可以使用numpy(推荐,尤其是数据量大时)

numpy对多维数组的均值计算做了高度优化,代码简洁且效率拉满:

import numpy as np

# 先提取所有对象的attributions属性
all_attrs = [obj.attributions for obj in attrs]
# 沿第0轴(也就是对象维度)逐元素求平均,再转回列表格式
mean_attrs = np.mean(all_attrs, axis=0).tolist()

比如你的例子里,np.mean会自动把两个二维数组对应位置的元素相加后除以2,直接得到你要的[[3,2],[6,7]]。

场景2:纯Python实现(无第三方库依赖)

如果不能用numpy,用zip(*...)来分组对应位置的元素是最清晰高效的纯Python写法:

all_attrs = [obj.attributions for obj in attrs]
count = len(all_attrs)

# 嵌套zip实现逐元素分组求和
mean_attrs = [
    [sum(col_values) / count for col_values in zip(*row_group)]
    for row_group in zip(*all_attrs)
]

代码逻辑拆解:

  1. zip(*all_attrs)会把每个对象的第1行、第2行...分别打包成组——你的例子里会得到([[2,1], [4,3]], [[4,6], [8,8]])
  2. 对每个行组(比如第一个行组[[2,1], [4,3]]),再用zip(*row_group)把同一列的元素打包,得到(2,4)和(1,3)
  3. 对每个列的元素求和后除以对象数量,就得到对应位置的均值

关于你现有方法的补充

如果你的attributions已经是numpy数组,那sum(a.attribution for a in attrs)/len(attrs)是可行的,但不如np.mean简洁——np.mean内部已经做了求和+除以数量的操作,而且处理边缘情况(比如空列表)更稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:23:02