Мне нужно сохранить поток элементов в ограниченном по размеру списке.В потоке могут быть повторяющиеся элементы, но мне нужно просто сохранить уникальные.Также, когда размер моего списка превышает указанное ограничение, мне нужно удалить самый старый элемент и добавить новый.
Я уже пробовал set
и list
.Проблема с set
заключается в том, что он не ограничен по размеру, и если я хочу удалить самый старый элемент, я понятия не имею, как его получить, потому что set неупорядочено;однако это решает проблему уникальности.
С другой стороны, list
сохраняет порядок элементов, но мне нужно проверять наличие возможных дубликатов всякий раз, когда я хочу вставить новый элемент, и это может стоить многовремени.Также list
не ограничен по размеру, как set
.
Мой третий вариант может быть collections.deque
, но я не знаю, соблюдает ли он порядок или нет.И есть ли способ сохранить элементы в collections.deque
уникальными?
Это примеры моих кодов для list
:
ids = list()
for item in stream:
if item not in ids:
ids.append(item)
if len(ids) >= len_limit:
del ids[0]
и set
:
ids = set()
for item in stream:
ids.add(item)
if len(ids) >= len_limit:
ids.remove(list(ids)[0])