【发布时间】:2013-09-30 05:07:32
【问题描述】:
基本上,我想对并行列表中的项目求和,如下所示:
[[1, 2, 3, 4],
[4, 3, 2, 1]] # list of lists (can be more than two)
[5, 5, 5, 5] # result
但是, 问题是列表多了一个维度,本质上是“3D”。但我只想总结最里面的对中的第二项:
[[[0, 1], [0, 2], [0, 3], [0, 4]],
[[1, 4], [1, 3], [1, 2], [1, 1]]] # add the numbers downward
[[0, 5], [0, 5], [0, 5], [0, 5]] # result
每对中的第一个项目可以单独放置。对他们来说,只复制第一行就可以了。
无论如何,我想不出一个好的方法来做到这一点。我找到了这种方式:
l = [[[0, 1], [0, 2], [0, 3], [0, 4]],
[[1, 4], [1, 3], [1, 2], [1, 1]]]
s = map(sum, zip(*[[j[1] for j in i] for i in l])) # to be summed
o = [i[0] for i in l[0]] # others
result = [[j for j in i] for i in zip(o, s)]
...但我无法忍受。如果有更好的方法,我将不胜感激。
感谢您的所有脑力劳动!
附:请记住,列表中可以有任意数量的列表,而不仅仅是 2 个!
【问题讨论】:
-
你看过 numpy 数组和掩码吗?我认为第一部分“我的最终目标..”使问题有点混乱。也许你应该把那部分去掉。