我有一个拥有大量数据的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())
答案 0 :(得分:6)
deques没有多重弹出方法。欢迎您向bugs.python.org提交功能请求,我会考虑添加它。
我不知道您的用例的详细信息,但如果您的数据是4096块,请考虑将块存储在元组或列表中,然后将块添加到双端队列中:
block = data[:4096]
d.append(block)
...
someblock = d.popleft()
答案 1 :(得分:3)
你使用deque
.popleft()
方法的地方确实是将元素放在前面的最佳方法。您可以对其进行索引,但索引性能会降低到双端队列的中间位置(而不是具有快速索引访问权限但速度较慢的列表)。你可以侥幸逃脱(节省几行代码):
A = arange(100000)
B = deque(A)
C = [B.popleft() for _i in xrange(4096)]