为何我的Codewars挑战Python解决方案出现执行超时?
Python代码效率问题分析与优化
原代码的问题
原代码存在无限循环:
def check(seq, elem): i=0 b=0 while i<len(seq): while (b==0): if (seq[i]==elem): b=1 i+=1 return(True) else: return(False)
内层while (b==0)循环中,当seq[i] != elem时,b始终为0,且i不会递增,导致内层循环永远无法退出,直接触发无限循环。
修改后代码的问题
修改后的代码依然存在无限循环,导致执行超时:
def check(seq, elem): i=0 b=0 while (b==0) and (i<len(seq)): if (seq[i]==elem): b=1 i+=1 return(True) else: return(False)
循环体中只有找到目标元素时才会执行i+=1,如果当前seq[i] != elem,i的值始终不变,循环条件永远成立,陷入无限循环,最终导致超时。
正确的解决方案
最简高效写法
Python内置了序列成员判断的语法,直接使用elem in seq即可,这是底层优化过的实现,效率最高:
def check(seq, elem): return elem in seq
手动循环实现(适合练习循环逻辑)
如果要手动实现循环,必须保证每次循环都让i递增,不管是否找到元素:
def check(seq, elem): i = 0 while i < len(seq): if seq[i] == elem: return True i += 1 # 无论是否匹配,都要递增索引 return False
这样遍历完所有元素后,若未找到目标则返回False,不会出现循环卡死的情况。
内容的提问来源于stack exchange,提问作者Verpanther
相关产品推荐
相关产品推荐

