1

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

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

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

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

2 回答 2

4

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

numpy专为对大量数据进行高效操作而设计,但由于它不是本机 Python 的一部分,因此引入了一些恒定的开销。

另外,如果您追求性能,itertools.izip可能会给您带来更好的速度。


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

于 2012-07-12T16:01:00.373 回答
0

您还可以使用:

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

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

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

于 2012-07-12T16:19:49.157 回答