博客
关于我
Python内置算法与数据结构
阅读量:331 次
发布时间:2019-03-04

本文共 1383 字,大约阅读时间需要 4 分钟。

 

看完<<Effective-Python编写高质量Python代码的59个有效方法>>后做的一些记录。


  • 双向队列: collection -> deque

该队列的头部或尾部插入或移除一个元素, 只需要消耗常数级时间。

fifo = deque()fifo.append(1)x = fifo.popleft()复制代码

  • 有序字典 collections -> OrderedDict

OrderedDict, 是一种特殊的字典, 它能够按照键的插入顺序,来保留键值对在字典中的次序。

a = OrderedDict()a['foo'] = 1a['bar'] = 2b = OrderedDict()b['foo'] = 'red'b['bar'] = 'blue'for value1, value2 in zip(a.values(), b.balues()):	print(value1, value2)复制代码

  • 带有默认值的字典 collections -> defaultdict

如果字典里没有待访问的键,那么它就会把某个默认值与这个建自动关联起来

stats = defaultdict(int)stats['my_counter'] += 1复制代码

  • 堆队列(优先级队列) heapq

堆(heap)是一种数据结构, 很适合用来实现优先队列

import heapqa = []heapq.heappush(a, 5)heapq.heappush(a, 3)heapq.heappush(a, 5)heapq.heappush(a, 2)print(heapq.heappop(a), heapq.heappop(a))2 3复制代码

  • 二分查找 bisect -> bisect_left

bisect模块中的bisect_left等函数,提供高效的二分折半搜索算法,能够在一系列排好顺序的元素之中搜寻某个值。

import bisecti = bisect.bisect_left(a, 5)复制代码

  • 与迭代器有关的工具 itertools

1. 能够把迭代器连接起来的函数

  • chain: 将多个迭代器按顺序连成一个迭代器。
  • cycle: 无限地重复某个迭代器的各个元素。
  • tee: 把一个迭代器拆分成多个平行的迭代器。
  • zip_longest: 与内置的zip函数相似,但是它可以应对长度不同的迭代器。

2. 能够从迭代器中过滤元素的函数

  • islice: 在不进行复制的前提下, 根据索引值来切割迭代器。
  • takewhile: 在判定函数为True的时候, 从迭代器中逐个返回元素。
  • dropwhile: 在判定函数初次为False的地方开始, 逐个返回迭代器中的元素。
  • filterfalse: 从迭代器中逐个返回能令判断函数为False的所有元素。与内置的filter函数相反。

3. 能够把迭代器中的元素组合起来的函数

  • product: 根据迭代器中的元素计算笛卡儿积,并将其返回。可以用product来改写深度嵌套的列表推导操作。
  • permutations: 用迭代器中的元素构建长度为N的各种有序排列,并将所有排列形式返回给调用者。
  • combination: 用迭代器中的元素构建长度为N的各种无序组合,并将所有组合形式返回给调用者。

转载地址:http://dich.baihongyu.com/

你可能感兴趣的文章
Netty工作笔记0024---SelectionKey API
查看>>
Netty工作笔记0025---SocketChannel API
查看>>
Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
查看>>
Netty工作笔记0028---NIO 网络编程应用--群聊系统3--客户端编写1
查看>>
Netty工作笔记0034---Netty架构设计--线程模型
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0057---Netty群聊系统服务端
查看>>
Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
查看>>
Netty工作笔记0063---WebSocket长连接开发2
查看>>
Netty工作笔记0070---Protobuf使用案例Codec使用
查看>>
Netty工作笔记0072---Protobuf内容小结
查看>>
Netty工作笔记0074---handler链调用机制实例1
查看>>
Netty工作笔记0077---handler链调用机制实例4
查看>>
Netty工作笔记0081---编解码器和处理器链梳理
查看>>
Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
查看>>
Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
查看>>
Netty工作笔记0085---TCP粘包拆包内容梳理
查看>>
Netty常用组件一
查看>>
Netty常见组件二
查看>>
netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
查看>>