You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何原地修改列表,前缀和小于阈值时从指定索引后元素置0

问题分析与代码修正方案

原代码问题梳理

  • 没有返回值:递归执行完成后没有返回修改后的列表,调用函数无法拿到处理结果
  • 违反副本限制:每次调用sum(numbers[0:last_index])都会生成切片副本,不符合原地修改、不允许创建列表副本的要求
  • 逻辑条件错误:阈值判断逻辑与需求相反,且没有处理索引越界、阈值大于等于列表总和、阈值小于第一个元素等边界场景
  • 缺少终止条件:没有设置递归的停止边界,极端情况会触发索引越界报错

修正后的递归实现代码

def f(numbers, val, cur_index=0, cur_sum=0):
    # 递归终止条件:遍历完所有元素,说明总和未超过阈值,直接返回
    if cur_index >= len(numbers):
        return numbers
    cur_sum += numbers[cur_index]
    if cur_sum > val:
        # 原地逐个置0,不创建任何新列表副本
        for i in range(cur_index, len(numbers)):
            numbers[i] = 0
        return numbers
    # 未超过阈值,递归处理下一个元素
    return f(numbers, val, cur_index + 1, cur_sum)

验证测试

numbers = [4, 5, 7, 2]
print(f(numbers.copy(), 4))  # 输出 [4, 0, 0, 0]
print(f(numbers.copy(), 3))  # 输出 [0, 0, 0, 0]
print(f(numbers.copy(), 10)) # 输出 [4, 5, 0, 0]
print(f(numbers.copy(), 17)) # 输出 [4, 5, 7, 0]
print(f(numbers.copy(), 18)) # 输出 [4, 5, 7, 2] 总和等于阈值,无需置0

内容的提问来源于stack exchange,提问作者user17189165

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:45:04