1.用列表实现堆栈
使用列表方法实现堆栈非常容易,最后插入的最先取出(“后进先出”)。把元素添加到堆栈的顶端,使用 append()
。从堆栈顶部取出元素,使用 pop()
,不用指定索引。
>>>stack = [3, 4, 5]
>>>stack.append(6)
>>>stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>>stack.pop()
7
>>>stack
[3, 4, 5, 6]
>>>stack.pop()
6
>>>stack.pop()
5
>>>stack
[3, 4]
2.用列表实现队列
列表也可以用作队列,“先进先出”原则(最先加入的元素,最先取出)。但列表作为队列的效率很低。因为,在列表末尾添加和删除元素非常快,但在列表开头插入或移除元素却很慢(所有其他元素都必须移动一位)。
实现队列最好用的是 collections.deque
,可以快速从两端添加或删除元素。
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # 添加
>>> queue.append("Graham")
>>> queue.popleft() # 移除
'Eric'
>>> queue.popleft()
'John'
>>> queue
deque(['Michael', 'Terry', 'Graham'])
双向队列(deque)对象支持以下方法:
- append(x) 添加 x 到右端。
- appendleft(x) 添加 x 到左端。
- clear() 移除所有元素,使其长度为0。
- extend(iterable) < 3.2 新版功能 > 扩展deque的右侧,通过添加iterable参数中的元素。
- extendleft(iterable) 扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。
- count(x) < 3.5 新版功能 > 计算 deque 中元素等于 x 的个数。
- insert(i, x) 在位置 i 插入 x 。如果插入会导致一个限长 deque 超出长度 maxlen 的话,就引发一个 IndexError。
- pop() 移去并且返回一个元素,deque 最右侧的那一个。 如果没有元素的话,就引发一个 IndexError。
- popleft() 移去并且返回一个元素,deque 最左侧的那一个。 如果没有元素的话,就引发 IndexError。
- remove(value) 移除找到的第一个 value。 如果没有的话就引发 ValueError。
- reverse() 将deque逆序排列。返回 None 。