zoukankan      html  css  js  c++  java
  • bisect模块 分类: python基础学习 python 2013-06-28 17:58 288人阅读 评论(0) 收藏

    Python 中的bisect用于操作排序的数组,比如你可以在向一个数组插入数据的同时进行排序。下面的代码演示了如何进行操作:



    bisect.bisect( l , r) 假设列表l已排序,返回元素r可以插入在列表l的索引位置



    bisect.insort(l,i) 假设l是有序的列表,插入i,并保持最新的列表有序排列


    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

    输出结果为:


    New pos contents
    -----------------
     14  0[14]
     85  1[14,85]
     77  1[14,77,85]
     26  1[14,26,77,85]
     50  2[14,26,50,77,85]
     45  2[14,26,45,50,77,85]
     66  4[14,26,45,50,66,77,85]
     79  6[14,26,45,50,66,77,79,85]
     10  0[10,14,26,45,50,66,77,79,85]
      3  0[3,10,14,26,45,50,66,77,79,85]
     84  9[3,10,14,26,45,50,66,77,79,84,85]
     44  4[3,10,14,26,44,45,50,66,77,79,84,85]
     77  9[3,10,14,26,44,45,50,66,77,77,79,84,85]
      1  0[1,3,10,14,26,44,45,50,66,77,77,79,84,85]

     


    可以看到,在插入这些随机数的时候数组同时进行了排序。不过其中有一些重复的元素,比如上面的77,77。你可以对这些重复元素的顺序进行设置,如果希望重复的元素出现在与他相同的元素左边就是用bisect_left,否则就是用bisect_right,相应的使用insort_left和insort_right。比如下面的代码,我们可以看到出现重复的元素索引变化:

    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

     

    输出结果为:

    New pos contents
    -----------------
     14  0[14]
     85  1[14,85]
     77  1[14,77,85]
     26  1[14,26,77,85]
     50  2[14,26,50,77,85]
     45  2[14,26,45,50,77,85]
     66  4[14,26,45,50,66,77,85]
     79  6[14,26,45,50,66,77,79,85]
     10  0[10,14,26,45,50,66,77,79,85]
      3  0[3,10,14,26,45,50,66,77,79,85]
     84  9[3,10,14,26,45,50,66,77,79,84,85]
     44  4[3,10,14,26,44,45,50,66,77,79,84,85]
     77  8[3,10,14,26,44,45,50,66,77,77,79,84,85]
      1  0[1,3,10,14,26,44,45,50,66,77,77,79,84,85]

     

    此函数bisect.bisect(list,key) ,犹如java里的TreeMap的tailMap(fromkey)

  • 相关阅读:
    【Anagrams】 cpp
    【Count and Say】cpp
    【Roman To Integer】cpp
    【Integer To Roman】cpp
    【Valid Number】cpp
    重构之 实体与引用 逻辑实体 逻辑存在的形式 可引用逻辑实体 不可引用逻辑实体 散弹式修改
    Maven项目聚合 jar包锁定 依赖传递 私服
    Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器
    mysql案例~tcpdump的使用
    tidb架构~本地化安装
  • 原文地址:https://www.cnblogs.com/think1988/p/4628145.html
Copyright © 2011-2022 走看看