pythondeque:与列表的区别?

pythondeque:与列表的区别?,python,Python,我正在阅读Python文档:我不明白deque与列表有什么不同。从文件中: 返回从左到右初始化的新deque对象(使用append() 使用来自iterable的数据。如果未指定iterable,则新的deque 是空的 DEQUE是堆栈和队列的泛化(名称为 发音为“deck”,是“双端队列”的缩写。双向队列 支持线程安全、内存高效的附加和弹出 在中具有大致相同O(1)性能的端部 两个方向都有 虽然列表对象支持类似的操作,但它们针对 快速的定长操作,并为 pop(0)和insert(0,v)操作

我正在阅读Python文档:我不明白deque与列表有什么不同。从文件中:

返回从左到右初始化的新deque对象(使用append() 使用来自iterable的数据。如果未指定iterable,则新的deque 是空的

DEQUE是堆栈和队列的泛化(名称为 发音为“deck”,是“双端队列”的缩写。双向队列 支持线程安全、内存高效的附加和弹出 在中具有大致相同O(1)性能的端部 两个方向都有

虽然列表对象支持类似的操作,但它们针对 快速的定长操作,并为 pop(0)和insert(0,v)操作可更改大小和大小 基础数据表示的位置

如果deque基本上是一个列表,但效率更高,那么为什么要用列表来代替deque呢?

deque从末端推动和弹出的效率更高。请继续阅读,并在下面列出您可以找到的方法:

索引访问在两端都是O(1),而在中间则减慢到O(n)。要快速随机访问,请使用列表

从列表的开头添加或删除元素是O(n),但从中间获取元素是O(1)。对于德克人来说,情况正好相反


一般来说,当你不关心中间的东西时,你只需要一个DeGy;您希望按某种顺序向it提供内容,然后在其他地方按该顺序返回。

Deque
是一个双链接列表,而
list
只是一个数组

对于
Deque
而言,在索引i处随机访问对象是O(n),但是对于
List
而言是O(1)

在开始时快速插入和删除是
Deque
的最大优势。 快速随机读取是
列表
的优点

如果在容器的中间随机插入和删除,<代码> Deque <代码>必须找到节点(O(n)),然后插入一个新的节点(O(1)),而<代码>列表< /代码>必须移动一些节点(O(n))。


它们都有各自的用例。

应该迭代和/或随机访问列表。 典型用法:存储同质数据项的集合

队列设计为在末尾/开头操作。
典型用法:存储带有优先级信息的数据,便于进行宽/深优先搜索。

除了上面给出的答案之外,这将非常有用。从文档中:

也可以使用列表作为队列,其中第一个元素 添加的是检索到的第一个元素(“先进先出”);但是, 列表对此目的无效。而 列表的结尾很快,从列表的开头插入或弹出 列表很慢(),因为所有其他元素都必须移位 一个


有关时间复杂度分析的更多详细信息:

您不能对deque进行切片,例如,对于某些应用程序,deque上的rotate方法也非常优雅和有用,即使您不关心效率