python中的collections模块提供了很多有用的集合类,其中的deque可以称得上是加强版的列表。
deque基本具备所有的列表方法:
from collections import deque
q=deque([1,2,3])
q.append(1)
print(q)
q.extend([4,5])
print(q)
q.pop()
print(q)
运行结果:
deque([1, 2, 3, 1])
deque([1, 2, 3, 1, 4, 5])
deque([1, 2, 3, 1, 4])
deque(当然)和列表一样也是iterable的:
m=map(str,q)
print(list(m))
map函数接收两个参数,第一个为函数,第二个为iterable对象。它将iterable成员依次传递给函数,返回一个map对象。(详细了解:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317852443934a86aa5bb5ea47fbbd5f35282b331335000)
运行结果如下,很容易得将数字队列转化为对应的字符串列表
['1', '2', '3', '1', '4']
除了这些list可以满足的功能以外,deque还有两个list不具备的‘黑魔法’。
技能一:限制成员个数
在创建队列时,通过maxlen来限制成员个数,当新成员加入且队列已满时,旧的成员会被自动删除。
from collections import deque
q=deque([1,2,3],maxlen=3)
q.append(4)
print(q)
上面一段代码运行结果:
deque([2, 3, 4], maxlen=3)
技能二:操作队列头
使用list时,append与pop方法只针对列表尾,如果想要在队列的开头增添或删除成员,则需要deque的appendleft和popleft方法:
from collections import deque
q=deque([1,2,3])
q.appendleft(4)
q.appendleft(5)
print(q)
q.popleft()
print(q)
上面一段代码运行结果是很明显的:
deque([5, 4, 1, 2, 3])
deque([4, 1, 2, 3])