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

2 投票
5 回答
874 浏览
提问于 2025-04-17 12:29

我有一个列表

[["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 就是你的列表。

这个函数只会遍历列表一次,而且很自然地可以用来计算三个不同的值,甚至可以用更复杂的表达式。

撰写回答