python中的搜索算法';s列表
检查列表中是否存在元素的效率如何 假设我有一个列表L=[1,2,3,4,5],我执行以下命令:python中的搜索算法';s列表,python,list,Python,List,检查列表中是否存在元素的效率如何 假设我有一个列表L=[1,2,3,4,5],我执行以下命令: 5 in L >>> True 12 in L >>> False 这两件事都要花多少时间。确切地说,python的列表采用什么样的搜索算法?检查列表中的成员身份是一个O(n)操作。 将检查列表中的每个项目是否相等。如果发现某项相等,则返回True。因此,检查成员资格所需的时间取决于列表的长度和项目在列表中的位置(如果有): 相反,检查集合或dict中的成员身份是
5 in L
>>> True
12 in L
>>> False
这两件事都要花多少时间。确切地说,python的列表采用什么样的搜索算法?检查列表中的成员身份是一个
O(n)
操作。
将检查列表中的每个项目是否相等。如果发现某项相等,则返回True。因此,检查成员资格所需的时间取决于列表的长度和项目在列表中的位置(如果有):
相反,检查集合或dict中的成员身份是一个O(1)
操作
In [103]: s = set(xrange(10**6))
In [104]: %timeit 0 in s
10000000 loops, best of 3: 48 ns per loop
In [105]: %timeit 999999 in s
10000000 loops, best of 3: 65.3 ns per loop
In [106]: %timeit 1000001 in s
10000000 loops, best of 3: 45.7 ns per loop
这里是一个wiki页面,总结了这个问题。检查列表中的成员身份是一个
O(n)
操作。
将检查列表中的每个项目是否相等。如果发现某项相等,则返回True。因此,检查成员资格所需的时间取决于列表的长度和项目在列表中的位置(如果有):
相反,检查集合或dict中的成员身份是一个O(1)
操作
In [103]: s = set(xrange(10**6))
In [104]: %timeit 0 in s
10000000 loops, best of 3: 48 ns per loop
In [105]: %timeit 999999 in s
10000000 loops, best of 3: 65.3 ns per loop
In [106]: %timeit 1000001 in s
10000000 loops, best of 3: 45.7 ns per loop
下面是一个wiki页面,总结了搜索的结果。Python列表是线性搜索的。每次测试一个元素,从索引0到最后一个。Python列表是线性搜索的。每次测试一个元素,从索引0到最后一个。请注意,在Python 3中,范围(10**6)内的
1000001将只需要纳秒完成。请注意,范围(10**6)内的1000001将只需要纳秒完成。