我想知道如果我想对名为 l1 和 l2 的两个列表的元素(逐个元素)求和,最好做什么:
l3 = [i + j for i, j in zip(l1,l2)]
或将列表转换为数组并进行简单的求和
from numpy import array
l3 = list(array(l1) + array(l2))
这可能取决于列表有多大。
numpy
专为对大量数据进行高效操作而设计,但由于它不是本机 Python 的一部分,因此引入了一些恒定的开销。
另外,如果您追求性能,itertools.izip
可能会给您带来更好的速度。
对于随机列表,由于简单/可读性,我可能会选择[i+j for i,j in izip(l1, l2)]
它们,假设它们不够大,不足以带来显着的性能问题。
您还可以使用:
from operator import add
map(add, list1, list2)
这使用了潜在的优化operator.add
并避免使用zip
/ izip
,这会将输入截断为最短的序列,从而允许错误以静默方式失败 - 而map
(well operator.add
) 将引发异常。
可能是你在纯 Python 中能做的最好的事情......