集合真的比列表快吗?

时间:2018-11-28 22:41:42

标签: python performance

有人告诉我,在进行成员资格测试时,Python集要比列表集要快。

尽管timeit表明,对于大量值列表实际上更快。

对于具有更多重复的较小集合,其差异较小,甚至可以逆转,但是仍然没有明显的优势(我认为性能问题对于大量数据更重要,不是吗?)

如何解释这些数据?

>>> import timeit
>>> # Few repetitions on a bigger set:
>>> timeit.timeit('10000 in set(range(10000000))', number=10)
9.265543753999737
>>> timeit.timeit('10000 in list(range(10000000))', number=10)
4.788996731000225
>>> # More repetitions on a smaller set:
>>> timeit.timeit('10000 in set(range(10000))', number=100000)
32.068307194000226
>>> timeit.timeit('10000 in list(range(10000))', number=100000)
32.45919990500079

1 个答案:

答案 0 :(得分:4)

您所知道的是正确的,因为成员是使用哈希表存储的,所以在集合中进行的搜索为O(1)。在(未排序的)数组中搜索为O(n)。

测试的问题在于,您既要创建集合/数组,又要在同一行中对其进行搜索。在这种情况下,您都将测试插入所有项目的速度,然后搜索单个条目。

尝试这样的方法:

create table