我如何从双端队列中弹出()大量元素?

时间:2012-02-29 22:26:37

标签: python deque

我有一个拥有大量数据的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())

2 个答案:

答案 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)]