deque: deque是(double-ended queue)的缩写,读作"deck",底层机制是双向链表。
python内置的list的优势是足够灵活,根据索引快速访问一个元素,支持切片访问。 但list本质是一个连续的内存区域,当列表在追加元素的时候,有时候需要额外分配内存(动态分配内存有个内部机制,并不是每增加一个元素都需要做一次额外分配内存)。
当pop掉末尾元素时,也同样可能需要移除一个内存块。当从最左侧插入一个元素时,后面的元素都要依次移动一个位置,性能很差。
而deque做为一种双向链表的实现,在两端追加或删除元素的效率都非常高。但也有不足的地方,比如使用下标访问的速度不如list快,且不支持切片。 而两种类型在插入或移除处于中间位置的元素时,性能差不多。
由于deque的这种特性,使得它特别适合实现队列(queue)和栈(statck)。
deque([iterable[, maxlen]]): 使用一个iterable来构造一个deque,可以指定一个长度,如果iterable的长度超出了maxlen,那么只会保留最后maxlen长度的iterable元素。
import string
from collections import dequeprint(string.ascii_lowercase) # abcdefghijklmnopqrstuvwxyz
que = deque(string.ascii_lowercase, 10)
print(list(que)) # ['q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
appendleft(x): 从左侧追加一个元素。append与list的功能相同,都是从右侧追加一个元素。
popleft(): 从左侧移除一个元素。pop函数与list里的pop功能相同,是从右侧移除一个元素。有一点不同的是,不提供位置参数。
extendleft(iterable): 从左侧追加一组元素。