python数据结构(堆,栈,队列,哈希表)使用示例

本文深入探讨Python中的基本数据结构,如堆、栈、队列和哈希表,并详细解析高级集合工具如deque、defaultdict、OrderedDict、Counter及heapq的使用方法和应用场景。同时,介绍了如何利用这些工具进行高效的数据操作和算法实现。
基本数据结构:堆,栈,队列,哈希表
 
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_nowaitput_nowait 忽略线程阻塞地加入或弹出(blocking)
emptyfull 判断是否空(满),返回bool类型
 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值