python cookbook 搜索和排序

本小妞迷上赌 提交于 2020-03-01 05:41:15
1.当需要排序的时候,尽量设法使用内建 Python 列表的 sort 方法;
2.当需要搜索的时候,尽量设法使用内建的字典。
3.python  list.sort()方法:相比于手工构建一个辅助的元组列表,使用 sort 方法的 key=参数更加容易、更节省内存,而且速度也更快。
4.通常使用reduce(),map(),filter()要比使用字典、列表、集合内涵快一些
5.DSU 排序技术可以用于任意数目的主键。只要愿意,可以给元组增加足够多的键,当然它们的顺序得按照你希望进行的比较顺序进行排列。可以给列表的 sort 方法传递一个可选的命名参数 key,而且它可以被调用,作用于列表中的每个元素并获得用于排序的键。如果传递这样的一个参数,排序会在内部使用 DSU。
6.list的remove()方法,调用会线性地搜索整个列表以获取要删除的元素。一句话,如果需要 Python 中的伪随机行为,需要的是标准库的 randompopitem 模块。
7.list的sort方法的时间复杂度是O(nlogn)
8.当使用heapq模块时,你调用 heappop 从列表中获取元素时,总是得到当前最小的元素,然后所有节点会被调整,以确保堆特性仍然有效。每次通过 heappush 添加元素,或者通过heappop 删除元素,它们所花费的时间都正比于当前列表长度的对数(O(logN),准确地说)。只需要付出一点点代价(从总体来说,代价也非常小)。
9.当需要进行优化时,首先进行测量。不应该仅仅根据基本原理选择优化的方式,因为真实的性能数据变化多端,即使在两个兼容的发行版本之间也会有很大的差异。
10.如果列表 L 已经是排序完毕的状态,则 Python 标准库提供的 bisect 模块可以很容易地检查出元素 x 是否在 L 中,也可以很容易的添加元素使其处于新的排序状态,bisect模块采用二分查找方法,查找元素。






易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!