set 在查找元素时如何比 list 快得多,这与 list 中的有序维护有关吗?还是查找算法在集合中与列表不同?
>>> 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
>>>
请有人指出两者之间使用的任何链接或算法?
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 :)