In [1]: L = list(range(10**6))
In [2]: %timeit 0 in L
10000000 loops, best of 3: 43.2 ns per loop
In [3]: %timeit 999999 in L
100 loops, best of 3: 16.1 ms per loop
In [4]: %timeit 1000001 in L
100 loops, best of 3: 16.1 ms per loop
相反,检查集合或dict中的成员身份是O(1)操作。你知道吗
In [103]: s = set(xrange(10**6))
In [104]: %timeit 0 in s
10000000 loops, best of 3: 48 ns per loop
In [105]: %timeit 999999 in s
10000000 loops, best of 3: 65.3 ns per loop
In [106]: %timeit 1000001 in s
10000000 loops, best of 3: 45.7 ns per loop
检查列表中的成员身份是一个
O(n)
操作。 列表中的每一项都将按相等顺序进行检查。如果发现某个项相等,则返回True。因此,检查成员资格所需的时间取决于列表的长度,以及列表中项目的位置(如果有):相反,检查集合或dict中的成员身份是
O(1)
操作。你知道吗这里是一个wiki页面,总结了complexity of operations on Python builtin types。你知道吗
相关问题 更多 >
编程相关推荐