【问题标题】:How can I add the corresponding elements of several lists of numbers?如何添加几个数字列表的相应元素?
【发布时间】:2012-07-02 02:12:21
【问题描述】:

我有一些数字列表:

[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]

假设我使用的所有列表的长度相同,我如何添加这些列表的元素?

这是我希望从上面的列表中获得的输出。

[6, 9, 12, 15, 18]

我知道我需要某种循环 - 但我怎样才能优雅地做到这一点?

【问题讨论】:

    标签: python


    【解决方案1】:

    试试这个函数式代码:

    >>> map(sum, zip(*lists))
    [6, 9, 12, 15, 18]
    

    zip 函数匹配具有相同索引的元素。

    >>> zip(*lists)
    [(1, 2, 3), (2, 3, 4), (3, 4, 5), (4, 5, 6), (5, 6, 7)]
    

    然后使用mapsum 应用于每个元组。

    在线查看:ideone


    请注意,在 Python 3.x 中,map 不再返回列表。如果您需要该列表,请查看以下问题:

    (您可以拨打list)。

    【讨论】:

    • map 在 python 3.x 中返回一个地图对象
    • @AshwiniChaudhary:除非 OP 另有说明,否则我假设是 Python 2.x,但我添加了关于 Python 3.x 的注释。
    【解决方案2】:
    >>> lis=[[1,2,3,4,5],[2,3,4,5,6],[3,4,5,6,7]]
    
    >>> [sum(x) for x in zip(*lis)]
    [6, 9, 12, 15, 18]
    

    【讨论】:

      【解决方案3】:

      假设:

      a = [1,2,3,4,5]
      b = [2,3,4,5,6]
      c = [3,4,5,6,7]
      

      这样做:

      [sum(n) for n in zip(*[a, b, c])]
      

      【讨论】:

        【解决方案4】:

        使用numpy

        >>> seq = np.array([
        ... [1,2,3,4,5],
        ... [2,3,4,5,6],
        ... [3,4,5,6,7]])
        >>> np.sum(seq,axis=0)
        array([ 6,  9, 12, 15, 18])
        

        【讨论】:

        • 除非 OP 想继续使用 numpy,否则我不确定转换为 numpy 和从 numpy 转换是最好的方法。当然,如果需要执行更多的计算,numpy 将是要走的路
        【解决方案5】:

        怎么样:

        a = [1,2,3,4,5]
        b = [2,3,4,5,6]
        c = [3,4,5,6,7]
        
        s = map(sum, zip(a,b,c))
        

        【讨论】:

          【解决方案6】:

          这也适用于各种长度的列表(仅嵌套 1 次)。

          def sum_list_of_list_of_int(ll):
              l=[]
              for i in ll:  # "i" type is list
                  for ii in range(len(i)):  # "ii" type is int
                      if len(l)-1>=ii:
                          l[ii]+=int(i[ii])
                      else:
                          l.append(int(i[ii]))
              return l
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-22
            • 2013-09-18
            • 1970-01-01
            • 2016-08-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多