python - 在查找成员资格时,集合比列表快得多

标签 python list set

<分区>

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 :)

关于python - 在查找成员资格时,集合比列表快得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20537912/

相关文章:

python - 字典是否在 Python 3.6+ 中排序?

python - 增加列表列表的 Pythonic 方式

list - 从 lisp 中的列表中删除一个元素

python - 匹配多列忽略pandas中的顺序

c++ - 将 const_iterator 分配给迭代器

Python:如何获取一个用户名的组 id(如 id -Gn )

python - 如何在 sqlalchemy 查询中选择文字值?

c# - 将 2 个带有内部列表的字典与 Diff 字典进行比较?

c++ - 映射和设置插入功能无法解析

python - 不使用算术运算符计算 xxy