← Все вопросы
Как реализовать стек на обычном списке в Python?
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.
Ваш ответ
Войдите, чтобы ответить на вопрос.