Класс FIFO в библиотеке Python?Python

Программы на Python
Ответить
Anonymous
 Класс FIFO в библиотеке Python?

Сообщение Anonymous »

Ниже приведена простая реализация FIFO в Python. Мой вопрос заключается в том, существует ли уже что-либо эквивалентное в поддерживаемом пакете, особенно что-либо в стандартной библиотеке, поскольку это кажется достаточно обычным делом.
Функциональность: вы должны быть в состоянии добавить и перебрать его как список, но когда итерация дает элемент, внутренняя ссылка на этот элемент должна быть уничтожена.
Вот пример того, что я хочу что с этим делать:
f = Fifo()

# append to it

for i in range(5):
f.append(i)
print("length:", len(f))

# iterate over it, including appending while iterating

for i in f:
print("item:", i)
if i == 3:
f.append("something")
print("all for now")

# iterate again (maybe we didn't previously iterate fully,
# or, as in this example, appended some more items afterwards)

f.append("another thing")
f.append("and another thing")
print("length:", len(f))
for i in f:
print("item:", i)

чтобы дать:
length: 5
item: 0
item: 1
item: 2
item: 3
item: 4
item: something
all for now
length: 2
item: another thing
item: and another thing

А вот моя реализация. (При этом используется словарь. Немного более простая, но менее эффективная альтернатива использует внутренний список.)
class Fifo:

def __init__(self):
self._d = {}
self._cur = 0 # next key to pop

def __len__(self):
return len(self._d)

def append(self, v):
self._d[self._cur + len(self._d)] = v

def __next__(self):
if self._d:
v = self._d.pop(self._cur)
self._cur += 1
return v
else:
raise StopIteration

def __iter__(self):
return self


Подробнее здесь: https://stackoverflow.com/questions/629 ... on-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»