基本数据结构:堆,栈,队列,哈希表
Collections
deque: 双向列表 高效实现插入和删除,适用于堆列和栈
支持append, pop, append left, pop left
>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x’])
defaultdict:避免key不存在报错的问题,提供工厂函数,为字典查询提供默认值
>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'
python3.6(包含)之后,所有的普通dict()字典都变为有序的了,不再需要OrderedDict()这个类了
OrderedDict:有序字典,按插入顺序排序,dict的key默认是无序的,可以实现FIFO的dict
from collections import OrderedDict
class LastUpdatedOrderedDict(OrderedDict):
def __init__(self, capacity):
super(LastUpdatedOrderedDict, self).__init__()
self._capacity = capacity
def __setitem__(self, key, value):
containsKey = 1 if key in self else 0
if len(self) - containsKey >= self._capacity:
last = self.popitem(last=False)
print 'remove:', last
if containsKey:
del self[key]
print 'set:', (key, value)
else:
print 'add:', (key, value)
OrderedDict.__setitem__(self, key, value)
Counter:计数器,统计字符个数
>>> from collections import Counter
>>> c = Counter()
>>> for ch in 'programming':
... c[ch] = c[ch] + 1
...
>>> c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})
堆
python heapq只有小顶堆,没有大顶堆,数据取反可以实现大顶堆
import heapq
|
heapq 函 数 |
描 述 |
|
heappush(heap, x)
|
将x压入堆中
|
|
heappop(heap)
|
从堆中弹出最小的元素
|
|
heapreplace(heap, x)
|
替换元素
|
|
heapify(heap)
|
让列表具备堆特征
|
|
nlargest(n, iter)
|
返回iter中n个最大的元素
|
|
nsmallest(n, iter)
|
返回iter中n个最小的元素
|
优先队列
from queue import PriorityQueue
初始化方法传入一个参数 maxsize,表示队列的最大容量
主要方法:
qsize 获得元素数量
get / put方法加入或者弹出队列顶端的那个元素
get_nowait/ put_nowait 忽略线程阻塞地加入或弹出(blocking)
empty,full 判断是否空(满),返回bool类型
本文深入探讨Python中的基本数据结构,如堆、栈、队列和哈希表,并详细解析高级集合工具如deque、defaultdict、OrderedDict、Counter及heapq的使用方法和应用场景。同时,介绍了如何利用这些工具进行高效的数据操作和算法实现。
954

被折叠的 条评论
为什么被折叠?



