我想在一个循环中一次总结多个属性:
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)
首先关闭 - 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)
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |