
Python内置算法与数据结构
发布日期:2021-05-07 05:46:36
浏览次数:17
分类:技术文章
本文共 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的各种无序组合,并将所有组合形式返回给调用者。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月31日 16时42分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Typescript 学习笔记六:接口
2019-03-05
Scala字符串与容器
2019-03-05
关于JTAG,你知道的和不知道的都在这里
2019-03-05
【CTF】CTFHub 技能树 文件头检查 writeup
2019-03-05
web服务器-并发服务器2
2019-03-05
【算法】解析位运算
2019-03-05
【SqlServer】如何把本地SqlServer数据库部署到远程服务器上
2019-03-05
【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
2019-03-05
第9章 用户自己建立数据类型
2019-03-05
02、MySQL—数据库基本操作
2019-03-05
RedHat Linux-配置YUM仓库
2019-03-05
Redis数据类型
2019-03-05
1907: 树的路径覆盖
2019-03-05
OpenJDK1.8.0 源码解析————HashMap的实现(一)
2019-03-05
MySQL-时区导致的时间前后端不一致
2019-03-05
2021-04-05阅读小笔记:局部性原理
2019-03-05
将Java编译为本地代码
2019-03-05
go语言简单介绍,增强了解
2019-03-05
2.1 Kubernetes--Pod
2019-03-05