Есть очередь задач q = deque(['task1', 'task2']). Что произойдёт после вызова q.appendleft('urgent')?

AЭлемент 'urgent' добавится в конец очереди: результат deque(['task1', 'task2', 'urgent']) как при обычном .append()
BЭлемент 'urgent' добавится в начало очереди: результат deque(['urgent', 'task1', 'task2']) для метода .appendleft()
CГолова очереди заменится на 'urgent': результат deque(['urgent', 'task2']) после перезаписи старого первого элемента
DБудет ошибка AttributeError: тип deque метод .appendleft() в стандартной реализации модуля не поддерживает
Правильный ответ. Метод .appendleft(x) добавляет элемент в начало deque за время O(1).

Разбор

deque (двусторонняя очередь) поддерживает быстрое добавление и удаление с обоих концов. Метод .appendleft('urgent') вставит элемент в начало, и результат будет deque(['urgent', 'task1', 'task2']). Для обычного list вставка в начало через .insert(0, x) работает за O(n), потому что сдвигает все элементы. Для deque такая операция стоит O(1), что и делает его удобным как очередь с приоритетом по концу вставки.

Проверь себя · 1/3разбор после ответа
Есть список событий events = ["click"]. Объект events используется в нескольких местах по ссылке, поэтому важно изменить именно тот же объект (не создавать новый). Нужно добавить элементы из new_events = ["view", "purchase"], чтобы итог был плоским. Какой вариант корректен?
Тренировать Python в Telegram

Ещё вопросы по теме «Коллекции и структуры данных»