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

基本数据结构:堆,栈,队列,哈希表
 
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类型
 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值