【问题标题】:Sum combination of lists by element按元素对列表组合求和
【发布时间】:2019-09-05 11:15:11
【问题描述】:

我有一个嵌套列表,它可以有不同的长度(每个子列表将始终包含与其他子列表相同数量的元素):

list1=[[4.1,2.9,1.2,4.5,7.9,1.2],[0.7,1.1,2.0,0.4,1.8,2.2],[5.1,4.1,6.5,7.1,2.3,3.6]]

我可以使用 itertools 找到长度为 n 的子列表的所有可能组合:

n=2
itertools.combinations(list1,n)
[([4.1, 2.9, 1.2, 4.5, 7.9, 1.2], [0.7, 1.1, 2.0, 0.4, 1.8, 2.2]), 
([4.1, 2.9, 1.2, 4.5, 7.9, 1.2], [5.1, 4.1, 6.5, 7.1, 2.3, 3.6]), 
([0.7, 1.1, 2.0, 0.4, 1.8, 2.2], [5.1, 4.1, 6.5, 7.1, 2.3, 3.6])]

我想按索引对每个元组中的所有列表求和。在这个例子中,我最终会得到:

[([4.8, 4.0, 3.2, 4.9, 9.7, 3.4],
[9.2, 7.0, 7.7, 6.8, 10.2, 4.8],
[5.8, 5.2, 8.5, 7.5, 4.1, 5.8])]

我试过了:

[sum(x) for x in itertools.combinations(list1,n)]
[sum(x) for x in zip(*itertools.combinations(list1,n))]

每次都会出错。

【问题讨论】:

    标签: python sum list-comprehension combinations


    【解决方案1】:

    您可以为此使用zip

    >>> [tuple(map(sum, zip(*x))) for x in itertools.combinations(list1, n)]
    [(4.8, 4.0, 3.2, 4.9, 9.700000000000001, 3.4000000000000004),
     (9.2, 7.0, 7.7, 11.6, 10.2, 4.8),
     (5.8, 5.199999999999999, 8.5, 7.5, 4.1, 5.800000000000001)]
    

    【讨论】:

      【解决方案2】:

      试试这个:

      >>> list1=[[4.1,2.9,1.2,4.5,7.9,1.2],[0.7,1.1,2.0,0.4,1.8,2.2],[5.1,4.1,6.5,7.1,2.3,3.6]]
      >>> from itertools import combinations as c
      >>> list(list(map(sum, zip(*k))) for k in c(list1, 2))
      [[4.8, 4.0, 3.2, 4.9, 9.700000000000001, 3.4000000000000004], [9.2, 7.0, 7.7, 11.6, 10.2, 4.8], [5.8, 5.199999999999999, 8.5, 7.5, 4.1, 5.800000000000001]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        • 2013-09-03
        • 2021-09-01
        • 2013-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多