gpt4 book ai didi

python - 集合.deque : why q[9999] is faster than q[-1]?

转载 作者:太空宇宙 更新时间:2023-11-03 14:35:57 25 4
gpt4 key购买 nike

如果我是编写此功能的程序员,我会将其实现为负数表示从右开始,正数表示从左开始,这将导致 q[-1] 比 q[9999] 快得多。

但是-1从右转1步似乎并不比9999从右转1步更耗时,那么为什么q[-1]比q[9999]慢呢?

谢谢

>>> q = collections.deque()
>>> q.extend(range(10000))
>>> %timeit q[-1]
50.7 ns ± 0.195 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
>>> %timeit q[9999]
40.5 ns ± 0.528 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)

最佳答案

如果您在 Python 中实现 __getitem__,您将收到调用者使用的任何索引,无需修改。

然而,under the hood , collections.deque 实现了 C API sequence protocol ,并且 __getitem__ 的 C API 序列协议(protocol)版本的工作方式不同。如果您传入一个负数,Python 会将序列的 len 添加到您的索引中,然后再将其传递给 deque 的项目检索实现。

对于q[-1]q[9999],双端队列接收到的索引是9999,它必须决定是否从左侧或右侧迭代以找到您要求的元素。但是,q[-1] 首先有一层额外的开销。

关于python - 集合.deque : why q[9999] is faster than q[-1]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58526885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com