Python中计算两列表对应元素乘积之和的高效简洁实现方法
点积计算的高效原生Python实现
你要计算的是两个等长向量的点积(内积),原生Python可以用以下两种无需临时列表的高效实现:
1. 生成器表达式实现(最推荐)
直接在sum()中传入生成器表达式,不会生成完整的临时乘积列表,每迭代一次就计算一次乘积并直接累加,内存占用为O(1),列表长度越大,相比原实现的内存和性能优势越明显。
numbers = [1, 2, 3] numba = [4, 5, 6] result = sum(float(a) * float(b) for a, b in zip(numbers, numba)) print(result)
2. 函数式迭代器实现
如果偏好函数式写法,可以搭配operator.mul和map实现,所有步骤均为迭代器操作,同样不会产生临时列表:
from operator import mul numbers = [1, 2, 3] numba = [4, 5, 6] result = sum(map(mul, map(float, numbers), map(float, numba))) print(result)
性能说明
原实现需要先将所有乘积存入临时列表再求和,当列表长度达到百万级时,临时列表会占用大量内存,同时多次append操作也会带来额外开销。以上两种实现都省略了临时列表的存储环节,内存效率提升明显,计算速度也有小幅提升。
内容的提问来源于stack exchange,提问作者Peanut Jams
相关产品推荐
相关产品推荐

