这是代码:
def findsort(something, alist):
for item in alist:
if item == something:
return "found"
else:
return "not found"
def main():
print(findsort(6, [3, 6, 1, 8, 11, 14]))
main()
出于某种原因,这不符合我认为它应该工作的方式。
当我运行它时,会说“找不到”。但是,如果我将要查找的值更改为列表中的第一项,即3,则返回“已找到”。
我用字符串试过这个,得到了相同的结果。
有人可以告诉我我做错了吗?
答案 0 :(得分:5)
因为如果在第一次迭代中项目不匹配,则进入else分支返回“not found”,从而退出循环。
试试这个:
def findsort(something, alist):
for item in alist:
if item == something:
return "found"
return "not found"
或简单地说:
def findsort(something, alist):
return "found" if something in alist else "not found"
答案 1 :(得分:2)
@hyperboreus pointed out the cause of the error(else
分支在看到所有项目之前执行。“
要查找已排序(“有序”)列表中的项目,您可以使用bisect
module执行二进制搜索(O(log(n)
)而不是线性搜索{{1} }(item in alist
)例如,对于一百万个项目,二进制搜索需要大约几十个操作,而不是一百万个操作用于线性搜索。
O(n)