У меня есть список data_list
, который должен оставаться определенной длины x
все время.Я получаю новую информацию каждый определенный промежуток времени, а затем выполняю следующие действия:
new_info # type: list
data_list.extend(new_info)
del data_list[:len(new_info)]
, однако это очень медленно (я думаю, что del del копирует весь список).
Кроме того, после каждой циклической вставки я разрезаю список и выполняю все виды числовых вычислений, используя numpy.Это означает, что каждый раз я создаю новый массив для вычислений.
что бы вы порекомендовали?Не имеет значения, если рекомендуемой структуры данных нет в стандартной библиотеке.
Примечание: у меня нет всех new_info
в начале, поэтому это не может быть сделано вПакетная манера.
моя попытка
import sys
import itertools
from typing import Iterable
from collections import deque
class SetLengthDeque(deque):
def __getitem__(self, s):
# for me the common case is a slice so i prefer this,
# rather then check the type of s each time
try:
start, stop, step = s.start or 0, s.stop or sys.maxsize, s.step or 1
return list(itertools.islice(self, start, stop, step))
except AttributeError: # not a slice but an int
return self[s]
однако deque
на самом деле является связанным списком и циклическим массивом.При вставке он примерно на 2 порядка быстрее, однако при нарезке он в 7 раз медленнее, чем список.Кроме того, мне все еще нужно создавать массивный массив каждую итерацию.