Skip to main content
 首页 » 编程设计

python之满足条件时列表中值的总和

2025年05月04日12powertoolsteam

我有一个 python 列表 l 包含类 Element 的实例:

class Element: 
    def __init__(self, id, value): 
        self.id = id 
        self.value = value 
 
l = [Element(1, 100), Element(1, 200), Element(2, 1), Element(3, 4), Element(3, 4)] 

现在我想对 Elements 类的所有 value 成员求和,如果它们的 id 等于获得此列表:

l = [Element(1, 300), Element(2, 1), Element(3, 8)] 

执行此操作最符合 Python 风格的方法是什么?

请您参考如下方法:

itertools 无所不能(几乎?)。看看groupby :

from itertools import groupby 
from operator import attrgetter 
 
 
class Element: 
    def __init__(self, id, value): 
        self.id = id 
        self.value = value 
    def __repr__(self):  # kudos @mesejo 
        return "Element({}, {})".format(self.id, self.value) 
 
l = [Element(1, 100), Element(1, 200), Element(2, 1), Element(3, 4), Element(3, 4)] 
 
l.sort(key=attrgetter('id'))  # if it is already sorted by 'id', comment-out 
 
res = [Element(g, sum(sub.value for sub in k)) for g, k in groupby(l, key=attrgetter('id'))] 

结果是:

print(res)   # [Element(1, 300), Element(2, 1), Element(3, 8)]