不使用np.cumsum和itertools.accumulate计算列表累加到阈值的差值
阈值与整数列表累计和差值计算实现
需求说明
需要实现一个函数,计算两类差值:
- a) 用户定义的阈值与整数列表累加后首次超过阈值的累计和的差值
- b) 若遍历完列表所有元素总和仍未超过阈值,则计算阈值与列表总元素和的差值
示例参考
# 场景a示例:累计和首次超过阈值 elements = [10, 20, 15, 25, 50] cumulative_sum = [10, 30, 45, 70, 120] threshold = 35 difference = 10 # 场景b示例:总累计和未超过阈值 elements = [10, 20, 15, 25, 50] cumulative_sum = [10, 30, 45, 70, 120] threshold = 145 difference = 25
原有问题代码
最初仅能处理场景b的代码如下,无法适配场景a:
temp_list = [] sum = 0 for elem in numbers: sum += elem temp_list.append(sum) if sum < threshold: pass # get the last value in the cumulative sum list that exceeds the threshold value if sum > threshold: print(temp_list[-1] - sum)
无Numpy依赖的解决方案
无需借助额外第三方库,在遍历累加的过程中同步判断是否达到阈值,达到后直接终止循环即可同时适配两个场景,最终实现代码如下:
def difference(elements, threshold): cumsum = 0 for elem in elements: cumsum += elem if cumsum >= threshold: break return abs(cumsum - threshold)
注:该实现通过abs函数统一处理两种场景的差值计算,无需单独判断累计和是否超过阈值,代码更加简洁。
内容的提问来源于stack exchange,提问作者equanimity
相关产品推荐
相关产品推荐

