作用:维护有序列表,而不必在每次想列表增加一个元素时调用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的更多相关文章

  1. 每日一“酷”之Cookie

    Cookie---Http Cookie 作用:Cookie模块定义一些类来解析和创建HTTP cookie首部 Cookie模块为大多数符合RFC 2109的cookie实现一个解析器.这个实现没有 ...

  2. 每日一“酷”之Queue

    Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...

  3. 每日一“酷”之pprint

    pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图.格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅 ...

  4. 每日一“酷”之copy

    Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1.  浅副本 copy()创建的浅副 ...

  5. 每日一“酷”之heapq

    作用:heapq模块实现一个适用于Python列表的最小堆排序算法 堆(heap)是一个属性数据结构,其中子节点与父节点是一种有序关系.二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全 ...

  6. 每日一“酷”之array

    array--国定类型数据序列 array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型. 1.初始化 array实例化时可以提高一个参数来描述允许哪个种数据 ...

  7. 每日一“酷”之difflib

    介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...

  8. 每日一“酷”之textwrap

    介绍:需要美观打印时,可以使用textwrap模块来格式化要输出的文本,这个模块允许通过编程提高类似段落自动换行或填充特性等功能. 1 创建实例数据 sample_text = ''' I’m ver ...

  9. 每日一“酷”之string

    介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...

随机推荐

  1. iOS - 第三方框架 - AFN

    #5.AFNetworking 2.6使用方法 >2.6版本 支持 iOS7以上,而且支持NSURLConnectionOperation >3.0版本 支持 iOS7以上 NSURLCo ...

  2. (转)为什么安装win10后其他软件不能上网

    原文地址: http://zhidao.baidu.com/question/426358794987815412.html?qbl=relate_question_0&word=%C9%FD ...

  3. 重构4-Push Down Method(方法下移)

    我们介绍了将方法迁移到基类以供多个子类使用的上移方法重构,今天我们来看看相反的操作.重构前的代码如下: public abstract class Animal { public void Bark( ...

  4. Error reading from file 解决办法

    最近安装程序遇见这个问题: Error reading from file. 解决办法: 给这个程序添加权限: 添加SYSTEM的读写改..如果比较懒,直接全部允许. 然后Retry.

  5. AngularJS尝鲜一

    第一个小例子,体验一下: <!DOCTYPE html> <html> <head> <title>Index</title> </h ...

  6. C#垃圾回收机制

    C#属于托管的面相对象的语言,内存回收机制就是一个代表, C#有一套类似"全自动"的垃圾回收机制,也就是虚拟机会自动来判断执行内存的回收, 我们一般常用的Dispose(),Usi ...

  7. 每天一道LeetCode--434. Number of Segments in a String

    Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...

  8. android app性能优化大汇总(google官方Android性能优化典范 - 第2季)

    Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...

  9. Android之adb命令

    1.安装APK(如果加 -r 参数,保留已设定数据,重新安装filename.apk) adb install xxx.apk adb install -r xxx.apk 2.卸载APK(如果加 - ...

  10. SQL Server 数据类型简介

    在 SELECT 的查询过程和查询结果中,每个列.变量.表达式和参数都具有一个相关的数据类型.数据类型用于指定某个对象可保存的数据的类型. SQL Server系统的数据类型主要有:数值类型.日期和时 ...