【问题标题】:operations on lists using zip or array使用 zip 或数组对列表进行操作
【发布时间】:2012-07-12 15:55:45
【问题描述】:

我想知道如果我想对名为 l1 和 l2 的两个列表的元素(逐个元素)求和,最好做什么:

l3 =  [i + j for i, j in zip(l1,l2)]

或将列表转换为数组并进行简单的求和

from numpy import array
l3 = list(array(l1) + array(l2)) 

【问题讨论】:

  • 什么方面最好?表现?代码清晰?
  • numpy 几乎肯定会是更快的方法
  • 我宁愿考虑速度和内存使用情况

标签: python list numpy sum


【解决方案1】:

这可能取决于列表有多大。

numpy 专为对大型数据集进行高效操作而设计,但由于它不是原生 Python 的一部分,因此会引入一些固定开销。

此外,如果您追求性能,itertools.izip 可能会为您提供更快的速度。


对于随机列表,由于简单/可读性,我可能会选择 [i+j for i,j in izip(l1, l2)],假设它们的大小不足以影响显着性能。

【讨论】:

    【解决方案2】:

    你也可以使用:

    from operator import add
    map(add, list1, list2)
    

    这使用了可能优化的operator.add,并避免使用zip/izip,这会将输入截断为允许错误以静默方式失败的最短序列——而map(以及operator.add)将引发异常。

    可能是你在纯 Python 中能做到的最好的事情......

    【讨论】:

    • 即不考虑numpy
    • @jamylak 这就是我提到“在纯 Python 中”的原因
    • 我只是在澄清我的评论,你的回答很好。我没有为此 +1,因为我不喜欢它最不可读的方式,但在某些情况下它可能很有用
    猜你喜欢
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-13
    • 2011-11-21
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多