【问题标题】:Element-wise addition of two lists of different lengths?按元素添加两个不同长度的列表?
【发布时间】:2017-08-30 03:05:00
【问题描述】:

如何按元素添加不同长度的列表?
假设缺失元素为“0”。
注意:len(a) 总是小于或等于 len(b)

示例:

a=[1,2,3]
b=[1,2,3,4,5]

想要的结果:

result=[2,4,6,4,5]

我几乎可以,但不能完全做到这一点:

result=[sum(n) for n in zip(a,b)]

在进行压缩之前,是否可以自动将“0”元素附加到(列表 a),使其长度与(列表 b)相同?如果这是一个很好的 Pythonic 解决方案,那该怎么做呢?

【问题讨论】:

    标签: python


    【解决方案1】:

    有一个替代的zip 不会在最短的时间内停止:itertools.zip_longest()。您可以为较短的列表指定填充值:

    from itertools import zip_longest
    
    result = [sum(n) for n in zip_longest(a, b, fillvalue=0)]
    

    【讨论】:

      【解决方案2】:

      你可以使用izip_longest:

      >>> izip_longest(a,b,fillvalue=0)
      <itertools.izip_longest object at 0x10bbd2520>
      >>> list(_)
      [(1, 1), (2, 2), (3, 3), (0, 4), (0, 5)]
      

      那么你可以这样做:

      >>> [sum(t) for t in izip_longest(a,b,fillvalue=0)]
      [2, 4, 6, 4, 5]
      

      【讨论】:

        【解决方案3】:

        如果您不想导入任何内容,只需在较短列表的末尾附加多个零即可。

        result = [sum(n) for n in zip(a + [0] * (len(b) - len(a)), b)]
        

        【讨论】:

          【解决方案4】:

          你可以像这样用零填充 a 并使用 sum

          a=[1,2,3]
          b=[1,2,3,4,5]
          a[:] = [a[i] if i < len(a) else 0 for i,j in enumerate(b)]
          result=[sum(n) for n in zip(a,b)]
          print result
          

          结果

          [2, 4, 6, 4, 5]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-11-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-05
            • 1970-01-01
            • 1970-01-01
            • 2016-11-06
            相关资源
            最近更新 更多