我想知道Python中是否存在一个本机数据类型,它的作用类似于固定长度的FIFO缓冲区.例如,我想创建一个使用全零初始化的长度为5的FIFO缓冲区.然后,它可能看起来像这样:
[0,0,0,0,0]
然后,当我在对象上调用put函数时,它将移出最后一个零并将新值(例如1)放入左侧:
[1,0,0,0,0]
如果我放一个2,它会转移并看起来像这样:
[2,1,0,0,0]
...等等.新值出现在前面,最旧值出现偏移.我知道这很容易实现自己,但我想尽可能使用本机python数据类型.有谁知道哪种数据类型最适合这个?
Ale*_*lli 74
x = collections.deque(5*[0], 5)
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅文档collections.deque
; 您调用的方法push
实际上是appendleft
在该类型中调用的.
maxlen
在Python 2.6中添加了第二个参数(,给出了最大长度); 如果您使用的是旧版本的Python,则无法使用.
小智 10
你也可以使用列表
a = [0,0,0,0,0]
a.pop(0)
a.append(1)
print a
result [0,0,0,0,1]
Run Code Online (Sandbox Code Playgroud)
或者右侧的左侧,否则
a.pop(5)
a.insert(0,1)
print a
result [1,0,0,0,0]
Run Code Online (Sandbox Code Playgroud)
这篇文章还有一个例子
from collections import deque
domains = ['1.com','2.com','3.com']
d = deque(domains)
d.pop() #pop(delete) 3.com here
d.appendleft('new.com')
print d
Run Code Online (Sandbox Code Playgroud)
结果:
deque(['new.com', '1.com', '2.com'])
Run Code Online (Sandbox Code Playgroud)