Python:Рецепты/Оставляем N последних элементов
Оставляем N последних элементов
Задача
Вы хотите хранить ограниченное количество элементов, которое вы получаете в ходе выполнения итерации.
Решение
Для решения данной задачи подойдет collections.deque.
Пример
№1
deque(maxlen=N) создает очередь фиксированной длины. После заполнения очереди, самый старый элемент удаляется.
from collections import deque
q = deque(maxlen=5)
q.append(1)
q.append(2)
q.append(3)
q.append(4)
q.append(5)
Посмотрим, что находится в q(это вводить не надо):
deque([1, 2, 3, 4, 5], maxlen=5)
Добавим следующий элемент:
q.append(6)
Посмотрим, что находится в q(это вводить не надо):
deque([2, 3, 4, 5, 6], maxlen=5)
Как видим 1 слева пропала, 6 справа добавилось.
Добавим следующий элемент:
q.append(7)
Посмотрим, что находится в q(это вводить не надо):
deque([3, 4, 5, 6, 7], maxlen=5)
№2
В данном примере мы проходим по строкам файла и ищем совпадение с заданным текстом. При совпадении выводим сначала N предыдущих строк и потом последнюю совпавшую строку:
from collections import deque
def search(lines, pattern, history=5):
previous_lines = deque(maxlen=history)
for line in lines:
if pattern in line:
yield line, previous_lines
previous_lines.append(line)
with open("file.txt") as f:
for line, prevlines in search(f, 'python', 5):
for pline in prevlines:
print(pline, end='')
print(line, end='')
print('-'*20)
Содержимое файла:
1 python
2 python1
3 test python python
4 John
5 test1
6 python
7 python
8 python
9 python
10 python
11 python
Результат:
1 python
--------------------
1 python
2 python1
--------------------
1 python
2 python1
3 test python python
--------------------
1 python
2 python1
3 test python python
4 John
5 test1
6 python
--------------------
2 python1
3 test python python
4 John
5 test1
6 python
7 python
--------------------
3 test python python
4 John
5 test1
6 python
7 python
8 python
--------------------
4 John
5 test1
6 python
7 python
8 python
9 python
--------------------
5 test1
6 python
7 python
8 python
9 python
10 python
--------------------
6 python
7 python
8 python
9 python
10 python
11 python
--------------------
См.также
Внешние ссылки
- Справочник языка Python
- Python
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Рецепты
- Рецепты Python
- Последовательности в Python
- Работа с последовательностями в Python
- Распаковка в Python
- Работа со структурами данных в Python
- Структуры данных Python
- Последовательности
- Работа с последовательностями
- Распаковка
- Работа со структурами данных
- Структуры данных