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

如何退出while循环?我的Python代码陷入死循环无法终止

代码无法退出while循环的原因及修复

核心问题:死循环的触发原因

  • 异常永远不会被抛出:代码中只有在len(del_ingredient)!=len(ingredient)为假时才会raise异常,但np.delete删除4个元素后,数组长度必然减少4,这个else分支永远不会执行,except块里的return永远无法触发。
  • 未处理“无匹配序列”的情况:当某一轮for循环遍历完所有可能的索引都没找到[1,2,3,1]时,for循环正常结束,try块也顺利执行完毕,随后while True会再次开启新的循环,无限重复这个过程,没有任何退出条件。

修复方案

方案1:修改原代码的退出逻辑

在每一轮for循环结束后,添加标记判断是否找到匹配项,如果没找到就退出while循环:

import numpy as np

def solution(ingredient):
    ingredient = np.array(ingredient)
    answer = 0
    while True:
        found = False
        try:
            for i in range(len(ingredient)-3):
                if (ingredient[i:i+4] == [1,2,3,1]).all():
                    answer += 1
                    ingredient = np.delete(ingredient, slice(i, i+4))
                    found = True
                    break
            if not found:
                break
        except:
            break
    return answer

方案2:用栈实现更高效的逻辑(推荐)

避免numpy数组的频繁修改,用栈来跟踪元素,遇到[1,2,3,1]就弹出并计数:

def solution(ingredient):
    stack = []
    answer = 0
    for item in ingredient:
        stack.append(item)
        if len(stack) >=4 and stack[-4:] == [1,2,3,1]:
            answer +=1
            # 弹出最后4个元素
            del stack[-4:]
    return answer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:41:42