如何不依赖库实现索引+1与列表元素乘积求和的高效方法?
解决方法与模式说明
更高效的实现
你当前的手动循环速度偏慢,是因为Python层面的循环本身存在开销。不用额外导入库的话,直接用内置的sum函数搭配enumerate是最优方案——sum是底层C实现的函数,比手动写Python循环高效得多。
代码示例:
a = [1,5,6,7,11,15] total = sum((idx + 1) * num for idx, num in enumerate(a))
运行结果为202,和你的示例计算结果一致。enumerate会直接返回元素的索引与对应值,不用手动通过range(len(a))去获取索引,代码也更简洁。
另外你提到列表是升序排列,但这个求和逻辑和升序属性无关,不需要特意利用它来优化计算。
计算对应的模式
这个计算属于加权求和的一种,权重就是元素的位置序号(从1开始)。放到数学范畴里,它等价于两个向量的点积(内积):一个向量是你的列表a,另一个是由1到列表长度的连续整数构成的向量,两者对应元素相乘后求和,就是点积的定义。
内容的提问来源于stack exchange,提问作者s11010
相关产品推荐
相关产品推荐

