繁体   English   中英

将列表的子列表汇总到一个新列表中

[英]Summing sub-lists of lists into a new list

有一个列表,其中每个元素都是一对粒子属性。 想要将这些对的值组合到一个新列表中。 如果每对是一个单独的列表但不完全确定它们是否独立于另一个列表中,请知道如何执行此操作。

list = [[[846.0, -0.0431, -0.16, -846.0], [1270.0, -0.14, -0.174, 1270.0]], [[846.0, -0.0431, -0.16, -846.0], [35.0, 0.296, 0.205, 34.9]]]

等等 output 与

list2 = [[2116, -0.1831, -0.334, 424], [881.0, 0.259, -0.045, -811]] 

您可以使用列表理解和内置函数zipsum

lst = [[[846.0, -0.0431, -0.16, -846.0], [1270.0, -0.14, -0.174, 1270.0]],
        [[846.0, -0.0431, -0.16, -846.0], [35.0, 0.296, 0.205, 34.9]]]

result = [[sum(e) for e in zip(*l)] for l in lst]
print(result)

Output

[[2116.0, -0.1831, -0.33399999999999996, 424.0], [881.0, 0.2529, 0.044999999999999984, -811.1]]

那个部分:

zip(*l)

转换(例如):

[[846.0, -0.0431, -0.16, -846.0], [1270.0, -0.14, -0.174, 1270.0]]

变成这样的东西:

[(846.0, 1270.0), (-0.0431, -0.14), (-0.16, -0.174), (-846.0, 1270.0)]

然后sum(e)只是对这些对求和。

1 行中包含 numpy:

import numpy as np

original_list = np.array(
    [[[846.0, -0.0431, -0.16, -846.0], [1270.0, -0.14, -0.174, 1270.0]],
     [[846.0, -0.0431, -0.16, -846.0], [35.0, 0.296, 0.205, 34.9]]]
)

summed_list = np.array([np.sum(i, axis=0) for i in original_list])

我觉得应该是最短的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM