我有一个清单
[["Sunday", 7, 0], ["Sunday", 2, 0], ["Monday", 1, 5], ["Tuesday", 5, 0], ["Thursday", 2, 0], ["Friday", 3, 0], ["Friday", 1, 0], ["Saturday", 4, 0], ["Monday", 8, 0], ["Monday", 1, 0], ["Tuesday", 1, 0], ["Tuesday", 2, 0], ["Wednesday", 0, 5]]
我可以在列表中添加值以获得
之类的总和["I dont need this value", 37, 10]
答案 0 :(得分:8)
这正是reduce()
的目的:
In [4]: reduce(lambda x,y:['',x[1]+y[1],x[2]+y[2]], l)
Out[4]: ['', 37, 10]
其中l
是您的列表。
这只会遍历列表一次,并且自然有助于使用不同的 - 可能更复杂的 - 用于计算三个术语的表达式。
答案 1 :(得分:5)
对于每个项目的灵活数量的值,甚至更少的字符,您可以使用
In [1]: [sum(values) for values in zip(*l)[1:]]
Out[1]: [37, 10]
zip
产生相应项目组合的元组(即包含所有第1项的元组,包含所有第2项的元组等),每个元素可以相加(第一个字符串值除外) 。当然,如果需要,您仍然可以在开头添加""
或任何您喜欢的内容。
答案 2 :(得分:4)
我将您的列表分配给l
:
l = [ your list .... ]
['dont needed', sum( [ x[1] for x in l ] ), sum( [x[2] for x in l ] ) ]
结果:
['dont needed', 37, 10]
答案 3 :(得分:4)
当然,最终:
>>> stuff=[["Sunday", 7, 0], ["Sunday", 2, 0], ["Monday", 1, 5], ["Tuesday", 5, 0], ["Thursday", 2, 0], ["Friday", 3, 0], ["Friday", 1, 0], ["Saturday", 4, 0], ["Monday", 8, 0], ["Monday", 1, 0], ["Tuesday", 1, 0], ["Tuesday", 2, 0], ["Wednesday", 0, 5]]
>>> stuff=zip(*stuff)
>>> map(sum,stuff[1:])
[37, 10]
答案 4 :(得分:3)
>>> stuff=[["Sunday", 7, 0], ["Sunday", 2, 0], ["Monday", 1, 5], ["Tuesday", 5, 0], ["Thursday", 2, 0], ["Friday", 3, 0], ["Friday", 1, 0], ["Saturday", 4, 0], ["Monday", 8, 0], ["Monday", 1, 0], ["Tuesday", 1, 0], ["Tuesday", 2, 0], ["Wednesday", 0, 5]]
>>> sum(j for i,j,k in stuff),sum(k for i,j,k in stuff)
(37, 10)