Подтвердить что ты не робот

Как я могу поместить() множество элементов из 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())
4b9b3361

Ответ 1

Нет никакого метода многопоточности для deques. Вы можете отправить запрос функции на bugs.python.org, и я подумаю над его добавлением.

Я не знаю подробностей вашего прецедента, но если ваши данные поступают в блоках 4096, рассмотрите возможность хранения блоков в кортежах или списках, а затем добавление блоков в deque:

block = data[:4096]
d.append(block)
...
someblock = d.popleft()

Ответ 2

Где вы используете deque метод .popleft() - действительно лучший способ получить элементы с фронта. Вы можете индексировать его, но производительность индекса ухудшается до середины deque (в отличие от списка с быстрым индексированным доступом, но медленными попками). Вы могли бы избежать этого, хотя (сохраняет несколько строк кода):

A = arange(100000)
B = deque(A)
C = [B.popleft() for _i in xrange(4096)]