我正在阅读Python文档:我不明白deque与列表有何不同。从文件中:
返回一个从左到右初始化的新deque对象(使用append())和来自迭代的数据。如果未指定可迭代性,则新的deque为空。 Deques是堆栈和队列的泛化(名称发音为“deck”,是“双结束队列”的缩写)。Deques支持线程安全,内存效率高的附加和弹出弹出,在两个方向上的O(1)性能大致相同。 虽然list对象支持类似的操作,但它们为快速固定长度的操作进行了优化,并为pop(0)和insert(0,v)操作带来了O(n)内存移动开销,从而改变了底层数据表示的大小和位置。
如果一个德克基本上是一个列表,但效率更高,为什么要用一个列表代替一个德克呢?
发布于 2014-03-12 01:22:11
deque更有效地从末端推和弹出。请继续阅读,并在下面列出您可以找到的方法:
索引访问在两端为O(1),但在中间则减慢到O(n)。对于快速随机访问,使用列表代替。
从列表的开头添加或删除是O(n),但是从中间取元素是O(1)。对于一个德克人来说,事实恰恰相反。
所以一般来说,你只想在你不关心中间的东西的时候才想要,你想要按某种顺序给它喂食,然后在其他地方按顺序把它们放回去。
发布于 2014-03-12 01:30:53
Deque是一个双链接列表,而List只是一个数组。
在索引I处随机访问对象的Deque是O(n),而List是O(1)。
在开始时快速插入和删除是Deque的最大优点。快速随机读取是List的优点。
如果插入和删除在容器中间随机发生,Deque必须找到节点(O(n),然后插入一个新节点(O(1)),而List必须移动一些节点(O(n))。
他们都有自己的用例。
发布于 2018-06-20 20:03:03
一个列表应该被迭代和/或随机访问。典型使用:存储同构数据项的集合。
队列设计为在结束/开始时操作。典型使用:存储带有优先级信息的数据,方便广泛/深度优先的搜索。
https://stackoverflow.com/questions/22340087
复制相似问题