push(item):推入頂端pop():彈出頂端top() / peek():查看頂端不移除is_empty():判斷是否為空
class Stack:
def __init__(self):
self._items = []
def push(self, item):
self._items.append(item)
def pop(self):
if self.is_empty():
raise IndexError("pop from empty stack")
return self._items.pop()
def top(self):
if self.is_empty():
raise IndexError("top from empty stack")
return self._items[-1]
def is_empty(self):
return len(self._items) == 0
def __len__(self):
return len(self._items)
def __repr__(self):
return f'Stack({self._items})'
s = Stack()
s.push(1)
s.push(2)
s.push(3)
print(s.top()) # 3
print(s.pop()) # 3
print(s) # Stack([1, 2])
print(len(s)) # 2
Path 類別原文提供一個 Path 類別,除堆疊操作外含 remove() 移除底部 (index 0),這已違背 LIFO 原則,屬於佇列/雙端佇列行為。純堆疊不需此方法。
list 直接用 append/pop 即為堆疊collections.deque 雙端佇列,append/pop 同為 O(1),更適合高頻操作queue.LifoQueue 執行緒安全堆疊