Python遍历列表计算1到各值累加和的代码修复咨询
代码修复指引
原代码存在的问题
- 累加变量
suma定义在元素遍历循环的外部,计算完第一个元素的序列和后不会重置,后续元素的计算结果会叠加之前所有的计算值,无法得到单个元素对应的独立累加和 - 内层循环使用
range(1, n)时,Python的range是左闭右开区间,实际只会累加1到n-1的数值,漏掉了终点值n,不符合1累加到n的计算规则 - 函数命名为
sum,和Python内置求和函数重名,容易引发命名冲突;定义的__self__参数没有任何实际作用,属于冗余代码 - 循环内的
i += 1是无效逻辑,既不会修改循环遍历的索引,也不参与计算,完全可以删除
修复后可正常运行的代码
def calc_sequence_sums(): numbers = [ 2892921, 1939929, 2929202, 1758690, ] for idx, val in enumerate(numbers, 1): # 每个元素单独计算前,先把当前元素的累加值初始化为0 single_sum = 0 n = val # range终点设为n+1,确保n本身被纳入累加范围 for j in range(1, n + 1): single_sum += j print(f"第{idx}个元素(值为{val})的1~n累加结果:{single_sum}") return single_sum
效率优化方案
1到n的累加属于等差数列求和,不需要通过内层循环逐次相加,直接使用数学公式n*(n+1)//2就能得到结果,计算效率会提升几个数量级,适配大数值计算场景:
def calc_sequence_sums_fast(): numbers = [ 2892921, 1939929, 2929202, 1758690, ] for idx, val in enumerate(numbers, 1): single_sum = val * (val + 1) // 2 print(f"第{idx}个元素(值为{val})的1~n累加结果:{single_sum}") return
内容的提问来源于stack exchange,提问作者DanielMateusz
相关产品推荐
相关产品推荐

