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

Python While循环基础:列表升序连续性校验代码输出异常排查

问题排查与代码修正

嘿,我来帮你揪出代码里的问题,顺便给出修正方案~

你的代码里的三个关键错误

  • 列表被反复重置:你把b = []放在了while循环内部,这意味着每跑一次循环,都会重新创建一个空列表,之前添加的元素直接就没了,根本没法累积结果。
  • 提前返回中断流程:每次满足a[i] < a[i+1]的条件后,你立刻执行return b,这会让函数在第一次循环就直接结束,自然只能得到[1]。
  • 没必要的insert操作:用insert(i, a[i])完全是画蛇添足,而且循环变量i会导致插入位置混乱,咱们只需要按顺序把元素加到列表末尾就行。

修正后的代码(匹配你的预期输出)

根据你给出的预期结果,我猜你想要的是:收集所有满足“当前元素小于下一个元素”的前缀,直到遇到第一个不满足的元素时终止,且不包含那个触发终止的元素。修正后的代码如下:

def check_order(a):
    if not a:  # 先处理空列表的边界情况
        return []
    b = []
    i = 0
    while i < len(a) - 1:
        if a[i] < a[i+1]:
            b.append(a[i])
            i += 1
        else:
            break  # 不满足条件,立刻终止循环
    # 如果循环正常跑完(所有元素都递增),记得把最后一个元素加进去
    if i == len(a) - 1:
        b.append(a[i])
    return b

a = [1, 3, 4, 5, 6, 7, 22, 10]
print(check_order(a))  # 输出: [1, 3, 4, 5, 6, 7]

如果你的真实需求是要包含到22(因为7 < 22是满足条件的,直到22 > 10才终止),那可以用这个版本:

def check_order(a):
    if not a:
        return []
    b = [a[0]]  # 先把第一个元素加入,作为前缀起点
    i = 0
    while i < len(a) - 1:
        if a[i] < a[i+1]:
            b.append(a[i+1])
            i += 1
        else:
            break
    return b

a = [1, 3, 4, 5, 6, 7, 22, 10]
print(check_order(a))  # 输出: [1, 3, 4, 5, 6, 7, 22]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:27:37