如何退出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
相关产品推荐
相关产品推荐

