对对象列表的属性求和/平均

Posted

技术标签:

【中文标题】对对象列表的属性求和/平均【英文标题】:Sum / Average an attribute of a list of objects 【发布时间】:2012-06-08 10:35:30 【问题描述】:

假设我有一个类 C,它具有属性 a

从 Python 中的 C 列表中获取 a 总和的最佳方法是什么?


我已经尝试了以下代码,但我知道这不是正确的做法:

for c in c_list:
    total += c.a

【问题讨论】:

【参考方案1】:

使用generator expression:

sum(c.a for c in c_list)

【讨论】:

我喜欢这种简单性,但对于 c.A 是浮点数的大约 10 个元素来说,它的时间似乎是 (c1.A + c2.A + c3.A) 的一半。【参考方案2】:

如果您正在寻找除 sum 之外的其他度量,例如均值/标准差,您可以使用 NumPy 并执行以下操作:

mean = np.mean([c.a for c in c_list])
sd = np.std([c.a for c in c_list])

【讨论】:

【参考方案3】:

我有一个类似的任务,但我的任务是将持续时间相加作为您的属性c.a。 将此与here 提出的另一个问题结合起来,我想出了

sum((c.a for c in cList), timedelta())

因为,如链接中所述,sum 需要一个起始值。

【讨论】:

【参考方案4】:

使用内置statistics模块:

import statistics

statistics.mean((o.val for o in my_objs))

【讨论】:

以上是关于对对象列表的属性求和/平均的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ruby中对数组中对象的属性求和

有没有办法在 WPF 中求和或平均属性?

如何对对象内的对象属性求和?

LINQ的求和 平均 最大 最小 分组 计数 等等

如何使用 AngularJs 对对象数组中的属性值求和

list 求和 平均值 最大值 ---reverse 源列表反转 ---sort 正序排序