Python Stack: Your One-Stop-Shop for Development
В Python стек (stack) является одной из основных структур данных. Это структура данных, которая работает по принципу LIFO (Last-In First-Out). В стек можно добавлять элементы только на вершину стека и удалять элементы тоже только с вершины стека.
Для работы со стеком в Python есть несколько способов. Один из них - использование списка (list) как стека. Для этого есть две основные операции: append() для добавления элемента на вершину стека и pop() для удаления элемента с вершины стека. Например:
stack = []
stack.append(1) # добавляем элемент на вершину стека
stack.append(2)
stack.append(3)
print(stack) # выводим содержимое стека: [1, 2, 3]
top_elem = stack.pop() # удаляем элемент с вершины стека
print(top_elem) # выводим удаленный элемент: 3
print(stack) # выводим содержимое стека после удаления: [1, 2]
Кроме того, в Python есть встроенный модуль `collections`, в котором определен класс deque (double-ended queue). Он поддерживает все методы списка, а также имеет два специальных метода для работы со стеком - append() и pop(). При использовании deque как стека для добавления элементов на вершину стека следует использовать метод appendleft(), а для удаления элементов с вершины метод popleft(). Например:
from collections import deque
stack = deque()
stack.appendleft(1) # добавляем элемент на вершину стека
stack.appendleft(2)
stack.appendleft(3)
print(stack) # выводим содержимое стека: deque([3, 2, 1])
top_elem = stack.popleft() # удаляем элемент с вершины стека
print(top_elem) # выводим удаленный элемент: 3
print(stack) # выводим содержимое стека после удаления: deque([2, 1])
Также можно реализовать стек на основе своего класса. Для этого нужно создать специальные методы __init__() для инициализации объекта, push() для добавления элемента на вершину стека, pop() для удаления элемента с вершины стека и peek() для получения элемента с вершины стека без удаления его. Например:
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.items) # выводим содержимое стека: [1, 2, 3]
top_elem = stack.pop() # удаляем элемент с вершины стека
print(top_elem) # выводим удаленный элемент: 3
print(stack.peek()) # выводим элемент с вершины стека без удаления: 2