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

Тип данных Python для FIFO фиксированной длины

Я хотел бы знать, есть ли собственный тип данных в Python, который действует как FIFO-буфер фиксированной длины. Например, я хочу создать буфер FIFO длиной 5, который инициализируется всеми нулями. Тогда это может выглядеть так:

[0,0,0,0,0]

Затем, когда я вызываю функцию put на объект, он сдвигает последний ноль и помещает новое значение, например 1, в левую сторону:

[1,0,0,0,0]

Если я поставлю 2, он будет сдвигаться и выглядеть так:

[2,1,0,0,0]

... и так далее. Новое значение идет спереди, а самое старое - сбрасывается. Я понимаю, что это было бы очень легко реализовать самостоятельно, но я бы хотел использовать родные типы данных python, если это вообще возможно. Кто-нибудь знает, какой тип данных был бы лучше всего для этого?

4b9b3361

Ответ 1

x = collections.deque(5*[0], 5)

Подробнее о collections.deque см. docs; метод, который вы вызываете push, на самом деле называется appendleft в этом типе.

В Python 2.6 добавлен второй параметр (maxlen, дающий максимальную длину); если вы используете более старые версии Python, он не будет доступен.

Ответ 2

вы также можете использовать список

a = [0,0,0,0,0]

a.pop(0)
a.append(1)

print a
result [0,0,0,0,1]

или для левой стороны справа, в противном случае

a.pop(5)
a.insert(0,1)
print a
result [1,0,0,0,0]

Ответ 3

Еще один пример этого сообщения

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

результат:

deque(['new.com', '1.com', '2.com'])