【问题标题】:how to sum up elements in list of lists for arbitrary combination in python如何总结列表列表中的元素以在python中进行任意组合
【发布时间】:2021-10-19 15:55:09
【问题描述】:

我有一个这样的列表,

 A =      [[0.8922063, 0.26672425],
          [0.34475611, 0.35976697],
          [0.33253499, 0.18923898],
          [0.66872466, 0.46248986],
          [0.72823733, 0.10537784],
          [0.40903598, 0.70639412],
          [0.79926596, 0.90095583],
          [0.67886544, 0.84573289],
          [0.3641813, 0.64296743],
          [0.07461196, 0.74290527]]

这是列表列表的组合

我还有另一个清单

p = [5,4,2]

我需要对列表A中P对应的元素求和,即A的前5个子列表之和,然后是接下来4个(第6到第9)个子列表之和,最后是最后 2 个子列表。

【问题讨论】:

  • 子列表的总和是多少?
  • @GauravLuitel 预期的输出是什么?
  • 但是这样做的结果是什么。一个大列表,一个数字元组,一个数字?
  • 在给定任意列表 p 的情况下,您是否需要对列表 A 求和?
  • 同样在你的例子中 A 有 10 个列表,但 p 加起来有 11 个子列表?

标签: python list for-loop list-comprehension nested-lists


【解决方案1】:

将您的列表p 转换为您想要的切片列表:

>>> q = [0,5,9,10]

你可以这样做:

>>> q = [sum(p[:i]) for i in range(len(p)+1)]

然后对A的切片求和:

>>> for i in range(len(q)-1):
        listn = sum(sum(x) for x in A[q[i]:q[i+1]])
        print(listn)

4.35005729
5.34739895
0.81751723

【讨论】:

    【解决方案2】:

    此函数通过跟踪我们最后一个切片元素(从 0 开始)并使用 p 中的数字递增切片的索引来返回 A 中的块的总和列表。

    def sum_sublists(list1 : list, list2 : list) -> list:
        sums=[]
        last_slice = 0
        for chunk_size in list2:
            next_slice = last_slice+chunk_size
            sums.append(sum([sum(el) for el in list1[last_slice:next_slice]]))
            last_slice = next_slice
        return sums
    
    if __name__ == '__main__':
        p = [5,4,1]
        A = [[0.8922063, 0.26672425],
            [0.34475611, 0.35976697],
            [0.33253499, 0.18923898],
            [0.66872466, 0.46248986],
            [0.72823733, 0.10537784],
    
            [0.40903598, 0.70639412],
            [0.79926596, 0.90095583],
            [0.67886544, 0.84573289],
            [0.3641813, 0.64296743],
            
            [0.07461196, 0.74290527],   
            ]
    
        print(sum_sublists(A, p))
    

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2023-01-12
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      相关资源
      最近更新 更多