如何在嵌套的Python列表中相加数字
我有一个列表
[["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 个回答
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]
5
如果你想要每个项目有灵活数量的值,并且字符数更少,可以使用
In [1]: [sum(values) for values in zip(*l)[1:]]
Out[1]: [37, 10]
zip
会生成对应项目组合的元组(也就是说,它会生成一个包含所有第一个项目的元组,一个包含所有第二个项目的元组,依此类推),这些元组可以相加(除了第一个字符串值)。当然,如果需要的话,你仍然可以在开头加上""
或者你喜欢的任何东西。
8
这正是 reduce()
函数的用途:
In [4]: reduce(lambda x,y:['',x[1]+y[1],x[2]+y[2]], l)
Out[4]: ['', 37, 10]
这里的 l
就是你的列表。
这个函数只会遍历列表一次,而且很自然地可以用来计算三个不同的值,甚至可以用更复杂的表达式。