Python线性搜索linear search代码匹配到元素仍提示未找到是什么原因
问题原因
- 你的代码中
flag变量会在每次循环迭代时被强制覆盖:即使前面的迭代已经找到匹配元素将flag设为True,后续迭代遇到不匹配的元素时,依然会执行else分支把flag改回False,最终返回的flag仅代表数组最后一个元素是否和目标值匹配,自然无法得到正确结果。 - 举个实际运行的例子:如果搜索数字
5,它在数组索引1的位置就匹配成功、flag被设为True,但后续循环到索引2到9的元素时都不匹配,flag会被反复改为False,最终返回False。
修复方案
找到匹配元素后直接返回True即可,不需要继续遍历剩下的元素,既解决逻辑问题也能提升运行效率。如果遍历完所有元素都没找到,再返回False。
修正后的代码如下:
def linearsearch(arraydata, num): for i in range(len(arraydata)): if num == arraydata[i]: # 找到匹配直接返回,无需继续遍历 return True # 遍历完所有元素都没找到才返回False return False arraydata = [10,5,6,7,1,12,13,15,21,8] num = int(input("please input the number you want to find: ")) returnvalue = linearsearch(arraydata, num) if returnvalue: print("number has been found") else: print("number has not been found")
如果你需要保留
flag变量的写法,也可以只在匹配时修改flag,匹配后直接终止循环即可:def linearsearch(arraydata,num): flag = False for i in range(0,len(arraydata)): if num == arraydata[i]: flag = True break # 找到后直接跳出循环,不会再修改flag的值 return flag
内容的提问来源于stack exchange,提问作者Rishabh Kalia
相关产品推荐
相关产品推荐

