C ++ deque:
随机访问 - 常数O(1)
Python deque:
索引访问在两端都是O(1),但在中间减慢到O(n)。
如果我没有遗漏任何东西,那么对于python和C ++中的deques,其他一切都同样快,至少在复杂性方面。在某些情况下,有什么能让python的deque变得更好吗?如果没有,为什么他们不切换到C ++有什么?
答案 0 :(得分:5)
免责声明:这个答案很大程度上取决于杰夫的评论以及Why is a deque implemented as a linked list instead of a circular array ?已发布的答案
你的问题本质上是不同的,但上面的标题本身就是一个答案:在Python中,模块collections.deque在访问中间项时具有线性时间复杂度,因为它是使用链表实现的。
来自pydoc:
针对其端点附近的数据访问优化的类似列表的序列。
现在,如果你想知道为什么选择了这个实现,那么答案已经在Jeff指出的帖子中提供了。
答案 1 :(得分:0)
因为Deque是一个应该以特定方式使用的数据,由第一个或最后一个元素访问, 但python有时会对其数据结构做一些奇怪的事情,并为它们添加更多功能,或使用组合数据结构
在这种情况下,python具有函数
remove(value)
#Remove the first occurrence of value. If not found, raises a ValueError.
这允许您访问deque中间的数据结构元素,它不是此数据结构的“核心”操作,
导致“但在中间减慢到O(n)。”
因为在这种情况下它的行为类似于数组(逐个检查值)