在查找成员资格时,Set比列表快得多

时间:2013-12-12 07:54:18

标签: python list set

如何设置查找元素比列表快得多,是否与列表中的有序维护有关?或者查找算法的集合是否与列表不同?

>>> from timeit import Timer    
>>> Timer("100042 in L", "L=range(100000)").timeit(number=10000)
21.69940710067749
>>>
>>> Timer("100042 in S", "S=set(range(100000))").timeit(number=10000)
0.0006740093231201172
>>>

有人请求指出两者之间使用的链接或算法吗?

1 个答案:

答案 0 :(得分:7)

set使用哈希(it allows only items which are hashable),它比list的顺序访问快得多,可用于随机查找。

但是,如果搜索的项目位于开头,list可能会超过set

from timeit import Timer
print Timer("0 in L", "L=range(100000)").timeit(number=10000)
print Timer("0 in S", "S=set(range(100000))").timeit(number=10000)

我机器上的输出

0.00127078635541
0.00143169642464

编辑:记录各种对象上不同操作的时间复杂度here。谢谢@mgilson:)