如何通过一个循环传递对多个对象属性求和(make totals)?

Cha*_*eon 1 python python-2.7

我想在一个循环中一次总结多个属性:

class Some(object):
    def __init__(self, acounter, bcounter):
        self.acounter = acounter
        self.bcounter = bcounter

someList = [Some(x, x) for x in range(10)]
Run Code Online (Sandbox Code Playgroud)

我可以做一些比它更简单,更快速的事情吗?

atotal = sum([x.acounter for x in someList])
btotal = sum([x.bcounter for x in someList])
Run Code Online (Sandbox Code Playgroud)

Jon*_*nts 5

首先关闭 - sum不需要列表 - 您可以使用生成器表达式:

atotal = sum(x.acounter for x in someList)
Run Code Online (Sandbox Code Playgroud)

您可以编写辅助函数来搜索列表一次,但每个项目依次查找每个属性,例如:

def multisum(iterable, *attributes, **kwargs):
    sums = dict.fromkeys(attributes, kwargs.get('start', 0))
    for it in iterable:
        for attr in attributes:
            sums[attr] += getattr(it, attr)
    return sums

counts = multisum(someList, 'acounter', 'bcounter')
# {'bcounter': 45, 'acounter': 45}
Run Code Online (Sandbox Code Playgroud)