Python:Рецепты/Оставляем N последних элементов: различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) (→№1) |
Myagkij (обсуждение | вклад) (→№2) |
||
Строка 65: | Строка 65: | ||
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | <syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | ||
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) | |||
</syntaxhighlight> | |||
Содержимое файла: | |||
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | |||
1 python | |||
2 python1 | |||
3 test python python | |||
4 John | |||
5 test1 | |||
6 python | |||
7 python | |||
8 python | |||
9 python | |||
10 python | |||
11 python | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 71: | Строка 102: | ||
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | <syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div"> | ||
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 | |||
-------------------- | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Версия от 00:35, 22 апреля 2020
Проверка/Оформление/Редактирование: Мякишев Е.А.
Оставляем 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)
![]() |
Добавление или удаление элемента в очереди имеет сложность O(1), а вставка или удаление элемента в начале списка имеет сложность O(N) |
№2
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
--------------------
См.также
Внешние ссылки
Категории:
- Страницы с устаревшим атрибутом подсветки синтаксиса «enclose»
- Справочник языка Python
- Python
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- SEO
- Рецепты
- Рецепты Python
- Последовательности в Python
- Работа с последовательностями в Python
- Распаковка в Python
- Работа со структурами данных в Python
- Структуры данных Python
- Последовательности
- Работа с последовательностями
- Распаковка
- Работа со структурами данных
- Структуры данных