【发布时间】:2019-04-30 22:28:53
【问题描述】:
有人告诉我,在成员资格测试方面,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
【问题讨论】:
-
sets 更快在你已经建立它们 - 把它排除在你的时间 -
你包括了创建时间,
set(range(10000000))和list(range(10000000)),这是主导时间的,你需要隔离成员测试,看看什么是真正更好的 -
如果你只做一个成员资格测试,建立一个
set可能不是前进的方向,但如果你做很多测试,你想先建立一个set -
@Chris_Rands 在这种情况下很好,
range的成员资格测试无论如何都是最快的! -
@juanpa.arrivillaga 这个人为的例子是(在 Python 3 中)
标签: python performance