перезаписывающийся список
Мне нужно создать класс, который создает список фиксированный длины и если я хочу добавить больше чем длина, то перезаписывает список. Например,
cycled_list = CycledList(5)
cycled_list.append(1)
cycled_list.append(2)
cycled_list.append(3)
cycled_list.append(4)
cycled_list.append(5)
cycled_list.append(6)
```
Expected Output:
```
[6, 2, 3, 4, 5]
```'
Я отдельно написала алгоритм для переписывающегося списка
lst1 = [1,2,3,4,5,6,7,8,9]
size = 5
lst2 = lst1[size:]
for i in range (0,len(lst2)):
lst1[i]=lst2[i]
lst1=lst1.copy()
del lst1[-len(lst2):]
print (lst1)
Теперь то же самое нужно применить для класса
class CycledList:
def __init__(self, size: int):
self._data = []
def append(self, item):
self._data.append (item)
print (self._data)
Я не понимаю, как вывести последний результат добавления в список, он выводит все по этапам. Если я сдвину print влево, то выдаст ошибку что self не определен.
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Шаги:
- Добавил внутренний индекс
self._inner_idx, который увеличивается приappend - Пока количество элементов меньше заданного в
size, происходит добавление элементов - После достижения размера новые элементы заменяют уже существующие. Для цикличности индекса используем деление по модулю на заданный размер
self.size
Пример:
class CycledList:
def __init__(self, size: int):
self._inner_idx = 0
self._data = []
self.size = size
def append(self, item):
if len(self._data) < self.size:
self._data.append(item)
else:
self._inner_idx %= self.size
self._data[self._inner_idx] = item
self._inner_idx += 1
cycled_list = CycledList(5)
cycled_list.append(1)
cycled_list.append(2)
cycled_list.append(3)
cycled_list.append(4)
cycled_list.append(5)
cycled_list.append(6)
print(cycled_list._data)
# [6, 2, 3, 4, 5]