如何在Python中累加数组元素,达到阈值时终止运算?
问题描述
现有数组:
arrangebox = np.array([[1, 0], [2, 500], [3, 500], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 1500], [15, 0], [16, 0], [17, 0], [18, 0]])
需求:从数组第1个元素的第二个值开始累加(初始累加和为arrangebox[0][1]即0),依次加上后续元素的第二个值(0+500=500,500+500=1000,以此类推);当累加和加上下一个元素的值后≥1500时,立即停止运算,输出当前的累加和以及被累加的元素(除初始的第一个元素外)。
预期结果:保留元素[2, 500]、[3, 500],累加和为1000(因为加上[14,1500]后总和会达到2500,超过阈值1500)。
但尝试的代码得到错误结果1500,代码如下:
for i in range (17): s = arrangebox[i][1]+arrangebox[i+1][1] if s>= 1500: break i=i+1
请问该如何修正代码?
修正方案
错误原因
原代码的问题在于:
- 每次只计算当前元素和下一个元素的第二个值的单次和,而非持续累加的总和,所以当遍历到
i=13时,arrangebox[13][1]是1500,arrangebox[12][1]是0,单次和1500触发了break,得到错误结果。 for循环中手动修改i的值无效,range(17)会自动控制循环的i值,手动赋值不会改变循环的迭代逻辑。
正确代码
import numpy as np arrangebox = np.array([[1, 0], [2, 500], [3, 500], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 1500], [15, 0], [16, 0], [17, 0], [18, 0]]) total = arrangebox[0][1] # 初始累加和为第一个元素的第二个值 selected_elements = [] for elem in arrangebox[1:]: # 从第二个元素开始遍历 next_val = elem[1] # 先判断加上当前元素后是否超过阈值 if total + next_val >= 1500: break # 未超过则累加,并记录元素 total += next_val selected_elements.append(elem.tolist()) print("累加和:", total) print("保留的元素:", selected_elements)
代码说明
- 初始化
total为第一个元素的第二个值(0),selected_elements用于存储被累加的元素。 - 从第二个元素开始遍历数组,每次先预判加上当前元素的值是否会≥1500:
- 如果是,直接break停止循环;
- 如果不是,就把该值加到
total里,并把当前元素存入selected_elements。
- 最终输出的结果就是预期的累加和1000,以及对应的元素
[[2, 500], [3, 500]]。
内容的提问来源于stack exchange,提问作者Starwinwin
相关产品推荐
相关产品推荐

