每日一“酷”之bisect
作用:维护有序列表,而不必在每次想列表增加一个元素时调用sort排序
bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序。有些情况下,这比反复对一个了表序列更高效,另外也比构建一个大列表之后再显式对齐排序更为高效
1、有序插入
使用insort()按有序顺序像一个列表中插入元素
import bisect
import random
random.seed(1) print 'New Pos Contents'
print '--- --- --------'
l = []
for i in range(1,15):
r = random.randint(1,100)
position = bisect.bisect(l, r)
bisect.insort(l, r)
print '%3d %3d' % (r,position),l
执行结果:
输出的第一列显示了心随技术,第二列显示了这个数将插入到列表的那个位置,每一行余下的部分则是当前的有序列表
对于此例所处理的数据量来说,如果直接构建列表然后完成一次排序,可能速度更快。不过对于长列表而言,使用类似这样的一个插入序列算法可以大大节省时间和内存
注意:random.seed(1) 的是:伪随机数生成模块。如果不提供 seed,默认使用系统时间。使用相同的 seed,可以获得完全相同的随机数序列,常用于算法改进测试。
2、处理重复
上面的显示结果包括了一个重复值77。bisect模块提供了两种方法处理重复。新值可以插入到现有值得左边或右边。insort()函数实际上是insort_right()的别名,
这个函数会在现有值之和插入新值。相应的函数insort_left() 则在现有值之前插入新值
import bisect
import random
random.seed(1) print 'New Pos Contents'
print '--- --- --------'
l = []
for i in range(1,15):
r = random.randint(1,100)
position = bisect.bisect_left(l, r)
bisect.insort_left(l, r)
print '%3d %3d' % (r,position),l
处理结果:
使用bisect_left()和insect_left()处理同样的数据时,结果会得到相同的有序序列,不过重复值插入的位置有所不同
除了Python实现外,还有一个速度更快的C实现,如果有C版本,导入bisert时,这个实现会自动覆盖纯Python实现
每日一“酷”之bisect的更多相关文章
- 每日一“酷”之Cookie
Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有 ...
- 每日一“酷”之Queue
Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...
- 每日一“酷”之pprint
pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图.格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅 ...
- 每日一“酷”之copy
Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1. 浅副本 copy()创建的浅副 ...
- 每日一“酷”之heapq
作用:heapq模块实现一个适用于Python列表的最小堆排序算法 堆(heap)是一个属性数据结构,其中子节点与父节点是一种有序关系.二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全 ...
- 每日一“酷”之array
array--国定类型数据序列 array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型. 1.初始化 array实例化时可以提高一个参数来描述允许哪个种数据 ...
- 每日一“酷”之difflib
介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...
- 每日一“酷”之textwrap
介绍:需要美观打印时,可以使用textwrap模块来格式化要输出的文本,这个模块允许通过编程提高类似段落自动换行或填充特性等功能. 1 创建实例数据 sample_text = ''' I’m ver ...
- 每日一“酷”之string
介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...
随机推荐
- Android权限机制
Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制, 很多像我这样的新手,尤其是习惯了windows低安全限制的用户,很容易在这方面弄混淆,下 ...
- iOS - UI - UIPageControl
1.UIPageControl 分页控件 //分页控件初始化 UIPageControl * pageControl = [[UIPageControl alloc] init]; //分页页数 pa ...
- unity中js脚本与c#脚本互相调用
unity中js脚本与c#脚本互相调用 test1.js function OnGUI() { if(GUI.Button(Rect(25,25,100,30),"JS Call CS& ...
- zend studio常见问题解答
1.如何实现zend studio成为注册版请点击查看此链接http://www.geekso.com/ZendStudio100/ 2.如何将zend studio的默认GBK编码设置为其它编码,例 ...
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
在本系列的最后一篇,我们来讨论最后三个ActionResult:HttpStatusCodeResult.RedirectResult和RedirectToRouteResult .第一个用于实现针对 ...
- 【转载】看懂SqlServer查询计划
看懂SqlServer查询计划 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-M ...
- sqlserver关于对列的权限控制
-- 脚本新建登录数据库的用户 USE [master]GOCREATE LOGIN [sa1] WITH PASSWORD=N'123456', DEFAULT_DATABASE=[master], ...
- GitHub之创建
O(∩_∩)O~ 爱“搞事”的我又创了一个Github账号,和当初加入博客园的初衷一样,为了广泛交流和学习而已.很久之前我就发现了有很多人都在使用GitHub,然而当时看不懂英文(绝大部分都是英文), ...
- IIS 配置
1.上次遇到一个问题:建了一个WebService服务浏览的时候,弹出了一个身份验证的框. 启用了IUSR_SERVER之后,还是还是不行. 然后到计算机的安全策略->从网络访问些计算机,发现已 ...
- Windows下搭建论坛
Windows下搭建论坛 真正的O基础架构,一步一步走向成功 转载请注明原作者出处 环境准备篇 安装集成包软件 解压后如下 以管理员身份运行setup的批处理 选择推荐的apache版本 选择推荐的m ...