zoukankan      html  css  js  c++  java
  • 《流畅的python》:bisect来管理已排序的序列

    bisect模块提供的功能:

    一共包含四个函数

    insort_right(a, x, lo=0, hi=None)
    bisect_right(a, x, lo=0, hi=None)
    insort_left(a, x, lo=0, hi=None)
    bisect_left(a, x, lo=0, hi=None)

    insort_right函数:a是升序排列的,将x插入a后,仍然保持a升序排列;如果x已经存在于a中,则将x插入已经存在的值的右边

    insort_left函数:a是升序排列的,将x插入a后,仍然保持a升序排列;如果x已经存在于a中,则将x插入已经存在的值的左边

    bisect_right函数:a是升序排列的,返回x插入的索引值,满足插入x后,a仍是升序排列;当x已经存在于a中,返回的是已经存在的x右边的索引值

    bisect_left函数:a是升序排列的,返回x插入的索引值,满足插入x后,a仍是升序排列;当x已经存在于a中,返回的是已经存在的x左边的索引值

    其中可选参数lo默认为0,hi默认为列表长度值,限定搜索的范围

    上述情况的演示代码:

    import bisect
    
    haystack = [1,5,6,8,12,15,20,21,23,23,26,29,30]
    needles = [0,1,2,5,8,10,22,23,29,30,31]
    
    for needle in needles:
        positon = bisect.bisect_left(haystack,needle)
        print("元素{}插入的位置为{}".format(needle,positon))
        bisect.insort_left(haystack,needle)
        print("插入后的列表为{}".format(haystack))

    for needle in needles:
        positon = bisect.bisect(haystack,needle)
        print("元素{}插入的位置为{}".format(needle,positon))
        bisect.insort(haystack,needle)
        print("插入后的列表为{}".format(haystack))

    for needle in needles:
        positon = bisect.bisect_left(haystack,needle,lo=3,hi=5)
        print("元素{}插入的位置为{}".format(needle,positon))
        bisect.insort_left(haystack,needle,lo=3,hi=5)
        print("插入后的列表为{}".format(haystack))

     

  • 相关阅读:
    npm 常用命令
    jquery 滚动事件
    移动端触控事件封装(完整版)
    带动画的分页
    手机号码 座机号码验证
    js常用 弹出确认 取消对话框
    jQuery之select的option怎样绑定事件
    jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态
    jQuery live()方法使用及变更(事件委托)
    Could not publish server configuration for Tomcat v6.0 Server at localhost. Multiple Contexts have a path of "/tm".
  • 原文地址:https://www.cnblogs.com/canghai1024/p/13889392.html
Copyright © 2011-2022 走看看