← Все вопросы

Как реализовать стек на обычном списке в Python?

Задан 14 месяцев назад399 просмотров3 ответа
11

Понял идею стека (LIFO), но как это сделать на практике? Нужен отдельный класс или можно на списке?

3 ответа

19
✓ Принятый ответ — помог автору

Список и есть готовый стек. append() кладёт наверх, pop() снимает сверху:

stack = []
stack.append(1)   # push
stack.append(2)
stack.append(3)
print(stack.pop())  # 3 (последний вошёл — первый вышел)
print(stack.pop())  # 2
print(stack[-1])    # 1 — посмотреть вершину не снимая

Обе операции O(1). Ничего больше не нужно, отдельный класс — только если хочешь свой интерфейс или защиту от лишних методов.

Максим Лещенко @нет, pop(0) — это уже очередь и он медленный O(n) · 13 месяцев назад
Oleg Lugovskoi а pop() с начала тоже стек? · 13 месяцев назад
6

Можешь обернуть в класс, если хочешь нормальные имена push/peek:

class Stack:
    def __init__(self):
        self._data = []
    def push(self, x): self._data.append(x)
    def pop(self): return self._data.pop()
    def peek(self): return self._data[-1]
    def is_empty(self): return not self._data
5

list.append / list.pop.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект