python3 - 学习搜索,这个非常简单的例子不能正常工作

时间:2012-12-13 03:29:44

标签: python list sorting search python-3.x

这是代码:

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,则返回“已找到”。

我用字符串试过这个,得到了相同的结果。

有人可以告诉我我做错了吗?

2 个答案:

答案 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 errorelse分支在看到所有项目之前执行。“

要查找已排序(“有序”)列表中的项目,您可以使用bisect module执行二进制搜索(O(log(n))而不是线性搜索{{1} }(item in alist)例如,对于一百万个项目,二进制搜索需要大约几十个操作,而不是一百万个操作用于线性搜索。

O(n)