我有一个deque对象,它包含大量数据.我想从队列的前面提取4096个元素(我将它用作一种FIFO).似乎应该有这样做的方式,而不必迭代超过4096个pop请求.
这是正确/有效/愚蠢的吗?
A = arange(100000)
B = deque()
C = [] # List will do
B.extend(A) # Nice large deque
# extract 4096 elements
for i in xrange(4096):
C.append(A.popleft())
Run Code Online (Sandbox Code Playgroud)
deques没有多流行方法.欢迎您向bugs.python.org提交功能请求,我会考虑添加它.
我不知道您的用例的详细信息,但如果您的数据以4096为块,请考虑将块存储在元组或列表中,然后将块添加到deque中:
block = data[:4096]
d.append(block)
...
someblock = d.popleft()
Run Code Online (Sandbox Code Playgroud)
当您使用该deque
方法时.popleft()
,该方法确实是从前面获取元素的最佳方法。您可以为其建立索引,但索引性能在双端队列的中间会降低(与具有快速索引访问但弹出缓慢的列表相反)。不过你可以摆脱这个(节省几行代码):
A = arange(100000)
B = deque(A)
C = [B.popleft() for _i in xrange(4096)]
Run Code Online (Sandbox Code Playgroud)