如何在嵌套的Python列表中添加数字

时间:2012-02-07 08:15:06

标签: python nested-lists

我有一个清单

[["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]

5 个答案:

答案 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)