deque
Используйте быстрые двусторонние очереди
«deque» — бесплатный урок Python Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Что такое двусторонняя очередь
deque (произносится «дэк») — это двусторонняя очередь из модуля collections. Она поддерживает быстрое добавление и извлечение элементов с обоих концов.
Импортируйте её с помощью from collections import deque.
from collections import deque
d = deque([1, 2, 3])
print(d)Почему не использовать просто список
Списки медленно вставляют и удаляют элементы с начала, потому что каждый элемент должен сдвинуться. deque выполняет операции с началом за постоянное время, поэтому идеально подходит для очередей.
from collections import deque
d = deque(['b', 'c'])
d.appendleft('a')
print(d)Добавление с обоих концов
Используйте .append(), чтобы добавлять элементы справа, и .appendleft(), чтобы добавлять их слева.
from collections import deque
d = deque()
d.append(1)
d.append(2)
d.appendleft(0)
print(d)Извлечение с обоих концов
.pop() удаляет и возвращает крайний правый элемент, а .popleft() удаляет крайний левый. Оба метода работают быстро.
from collections import deque
d = deque([10, 20, 30])
print(d.pop())
print(d.popleft())
print(d)Простая очередь (FIFO)
Чтобы реализовать принцип «первым пришёл — первым ушёл», добавляйте элементы справа, а извлекайте с помощью popleft слева. Элементы будут выходить в порядке их поступления.
from collections import deque
queue = deque()
queue.append('first')
queue.append('second')
print(queue.popleft())
print(queue.popleft())Дек ограниченного размера
Задайте maxlen, чтобы ограничить размер. Когда дек заполнен, добавление элемента с одного конца автоматически удаляет элемент с другого — это удобно для хранения недавней истории.
from collections import deque
recent = deque(maxlen=3)
for n in [1, 2, 3, 4, 5]:
recent.append(n)
print(recent)Циклический сдвиг элементов
.rotate(n) сдвигает элементы вправо на n шагов, а отрицательное значение n выполняет сдвиг влево. Элементы перемещаются по кругу.
from collections import deque
d = deque([1, 2, 3, 4, 5])
d.rotate(2)
print(d)
d.rotate(-1)
print(d)Массовое добавление
.extend() добавляет множество элементов справа, а .extendleft() — слева. Обратите внимание: extendleft меняет порядок добавляемых элементов на обратный.
from collections import deque
d = deque([3])
d.extend([4, 5])
d.extendleft([2, 1])
print(d)Индексация и длина
Дек поддерживает индексацию, как список, и работает с len(). Доступ к середине выполняется медленнее, чем к концам, поэтому предпочтительнее операции с концами.
from collections import deque
d = deque(['a', 'b', 'c'])
print(d[0])
print(d[-1])
print(len(d))Очистка и обращение порядка
.reverse() разворачивает дек на месте, а .clear() очищает его. Оба метода изменяют дек непосредственно.
from collections import deque
d = deque([1, 2, 3])
d.reverse()
print(d)
d.clear()
print(d)Подсчёт вхождений
Как и у списка, у дека есть метод .count(), который подсчитывает, сколько раз встречается значение.
from collections import deque
d = deque([1, 2, 2, 3, 2])
print(d.count(2))Быстрая проверка
Вы создаёте очередь FIFO с помощью дека. Какая пара методов обеспечивает правильный порядок «первым пришёл — первым ушёл»?
Повторение: дек
Вы узнали, что deque:
- Поддерживает быстрые операции
append/popс обоих концов, в отличие от списка. - Имеет методы
appendleftиpopleftдля работы с левой стороной. - Может иметь ограниченный размер с помощью
maxlen, сохраняя только недавние элементы. - Предоставляет
rotate,extend,reverseиcountдля работы с очередями.
from collections import deque
q = deque(maxlen=2)
for x in ['a', 'b', 'c']:
q.append(x)
print(q)Часто задаваемые вопросы
Урок «deque» бесплатный?
Да — полный текст урока «deque» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «deque»?
Используйте быстрые двусторонние очереди Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «deque»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.