python标准库学习5 ---bisect — Array bisection algorithm

#coding=utf-8

 

import bisect

 

list=[1,2,3,4,6,7,8,9]   #假定list已经排序

print bisect.bisect_left(list,5#返回5应该插入的索引位置

 

print bisect.bisect_right(list, 5)

 

print bisect.bisect(list,5)

 

bisect.insort_left(list, 5, 0, len(list))

print list

 

bisect.insort_right(list, 5)

print list

 

def index(a, x):

    'Locate the leftmost value exactly equal to x'

    i = bisect_left(a, x)

    if i != len(a) and a[i] == x:

        return i

    raise ValueError

 

def find_lt(a, x):

    'Find rightmost value less than x'

    i = bisect_left(a, x)

    if i:

        return a[i-1]

    raise ValueError

 

def find_le(a, x):

    'Find rightmost value less than or equal to x'

    i = bisect_right(a, x)

    if i:

        return a[i-1]

    raise ValueError

 

def find_gt(a, x):

    'Find leftmost value greater than x'

    i = bisect_right(a, x)

    if i != len(a):

        return a[i]

    raise ValueError

 

def find_ge(a, x):

    'Find leftmost item greater than or equal to x'

    i = bisect_left(a, x)

    if i != len(a):

        return a[i]

raise ValueError

 

>>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):

...     i = bisect(breakpoints, score)

...     return grades[i]

...

>>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]

['F', 'A', 'C', 'C', 'B', 'A', 'A']

 

>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]

>>> data.sort(key=lambda r: r[1])

>>> keys = [r[1] for r in data]         # precomputed list of keys

>>> data[bisect_left(keys, 0)]

('black', 0)

>>> data[bisect_left(keys, 1)]

('blue', 1)

>>> data[bisect_left(keys, 5)]

('red', 5)

>>> data[bisect_left(keys, 8)]

('yellow', 8)

  

时间: 2024-12-28 01:03:27

python标准库学习5 ---bisect — Array bisection algorithm的相关文章

python标准库学习9

fileinput 模块允许你循环一个或多个文本文件的内容 使用 fileinput 模块循环一个文本文件 import fileinput import sys   for line in fileinput.input("samples/sample.txt"):     sys.stdout.write("-> ")     sys.stdout.write(line)   -> We will perhaps eventually be writ

python标准库学习7

使用 os.path 模块处理文件名 import os   filename = "my/little/pony"   print "using", os.name, "..." print "split", "=>", os.path.split(filename) print "splitext", "=>", os.path.splitext(fi

python标准库学习6

使用 apply 函数 def function(a, b):     print a, b   apply(function, ("whither", "canada?")) apply(function, (1, 2 + 3)) whither canada? 1 5 使用 apply 函数传递关键字参数 def function(a, b):     print a, b   apply(function, ("crunchy", &quo

python标准库学习8

使用sys重定向输出 import sys import string   class Redirect:       def _ _init_ _(self, stdout):         self.stdout = stdout       def write(self, s):         self.stdout.write(string.lower(s))   # redirect standard output (including the print statement) #

python标准库学习4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

Python标准库的学习准备

原文:Python标准库的学习准备 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准库所涉及的应用很广,所以需要学习一定的背景知识.   硬件原理 这一部份需要了解内存,CPU,磁盘存储以及IO的功能和性能,了解计算机工作的流程,了解指令的概念.这些内容基础而重要. Python标准库的一部份是为了提高系统的性能(比如mmap),所以有必要了

Python标准库——走马观花

原文:Python标准库--走马观花 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   Python的一大好处在于它有一套很有用的标准库(standard library).标准库是随着Python一起安装在你的电脑中的,是Python的一部分 (当然也有特殊情况.有些场合会因为系统安全性的要求,不使用全部的标准库,比如说Google App Engine).   利用已有的类(class)和函数(function)进行开发

Python标准库11 多进程探索 (multiprocessing包)

原文:Python标准库11 多进程探索 (multiprocessing包) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在初步了解Python多进程之后,我们可以继续探索multiprocessing包中更加高级的工具.这些工具可以让我们更加便利地实现多进程.   进程池 进程池 (Process Pool)可以创建多个进程.这些进程就像是随时待命的士兵,准备执行任务(程序).一个进程池中可以容纳多个待命的士兵.

Python标准库07 信号 (signal包,部分os包)

原文:Python标准库07 信号 (signal包,部分os包) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习和理解.signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂停并等待信号,以及定时发出SIGALRM等.要注意,signal包主要是针对UNIX平台(比如Linux, MAC OS),而Windo