Python中向数组添加元素并在突破目标值时返回其索引
解答你的问题
首先得指出你原来代码里的一个小问题:你想要的是每个元素在前一个基础上加40,但循环里的g += g + x逻辑不对——这会让g快速膨胀(比如第一次循环后g变成40+40+10=90,第二次变成90+90+10=190,数组元素会变成[10,50,100,200,...],和你预期的每次加40不符)。正确的逻辑应该是维护一个当前值变量,每次累加40。
回到你的核心问题:除了用range,还有更高效的实现方式,甚至不需要生成整个数组就能找到目标索引,这里提供两种实用方案:
方案一:用while循环动态生成(无需预设循环次数)
这种方式更灵活,不用提前猜测循环上限,生成元素直到找到第一个≥374的元素,同时记录索引:
current_val = 10 step = 40 target = 374 index = 0 # 先检查首个元素是否满足条件 if current_val >= target: print(index) else: while True: current_val += step index += 1 if current_val >= target: print(index) break
这个循环会在找到目标元素时立刻停止,不会生成多余的元素,比预设range的方式更高效。
方案二:用数学公式直接计算(最优解,无需循环/数组)
你的数组本质是等差数列:首项a₀=10(数组索引从0开始),公差d=40,第n个索引对应的元素值为:aₙ = 10 + 40*n。我们需要找到最小的n,使得10 +40*n ≥374。
解这个不等式:
10 +40n ≥374 40n ≥364 n ≥364/40 =9.1
因为n必须是整数,所以取n=10——也就是索引为10的元素是第一个≥374的元素(验证:10+4010=410≥374,前一个索引9的元素是10+409=370<374)。
用代码实现时,为了避免浮点数精度问题,我们用整数除法的向上取整技巧:
target = 374 initial_val = 10 step = 40 # 计算最小索引 index = ((target - initial_val) + step - 1) // step print(index)
这种方式直接一步算出结果,完全不需要生成数组或循环,是效率最高的方案。
内容的提问来源于stack exchange,提问作者JJJ
相关产品推荐
相关产品推荐

