非常教程

Python参考手册

数据类型 | Data Types

bisect

2.1版本中的新功能。

源代码: Lib / bisect.py

该模块支持按排序顺序维护列表,而无需在每次插入后对列表进行排序。对于昂贵的比较操作的长项目列表,这可能是比较常见的方法的改进。该模块被称为bisect是因为它使用基本的二分算法来完成其工作。源代码可能是最有用的算法的实例(边界条件已经正确!)。

提供以下功能:

bisect.bisect_left(a, x, lo=0, hi=len(a))

找到了插入点X一个维持有序。参数lohi可以用来指定应该考虑的列表子集; 默认情况下使用整个列表。如果x已存在于a中,则插入点将位于任何现有条目之前(在其左侧)。返回值适合用作list.insert()假定a已经排序的第一个参数。

返回的插入点分隔阵列一个分为两半,使得all(val < x for val in a[lo:i])用于左侧和all(val >= x for val in a[i:hi])用于右侧。

bisect.bisect_right(a, x, lo=0, hi=len(a))bisect.bisect(a, x, lo=0, hi=len(a))

类似bisect_left(),但返回其自带后(到右侧)的任何现有条目的插入点X一个

返回的插入点分隔阵列一个分为两半,使得all(val <= x for val in a[lo:i])用于左侧和all(val > x for val in a[i:hi])用于右侧。

bisect.insort_left(a, x, lo=0, hi=len(a))

插入X一个排序顺序。这相当于a.insert(bisect.bisect_left(a, x, lo, hi), x)假设a已经排序。请记住,O(log n)搜索主要由缓慢的O(n)插入步骤决定。

bisect.insort_right(a, x, lo=0, hi=len(a))bisect.insort(a, x, lo=0, hi=len(a))

类似于insort_left(),但在x 的任何现有条目之后的x中插入x

1.搜索排序列表

上述bisect()功能对于查找插入点非常有用,但对于常见的搜索任务可能会非常棘手或难以使用。以下五个函数显示如何将它们转换为排序列表的标准查找:

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

2.其他例子

bisect()函数可用于数字表查找。这个例子使用bisect()根据一组有序的数字断点来查找考试成绩(比如说)的字母等级:90和up是'A',80到89是'B',依此类推:

>>> 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']

sorted()函数不同,函数bisect()具有关键颠倒的参数是没有意义的,因为这会导致设计效率低下(对等函数的连续调用不会“记住”所有先前的关键字查找)。

相反,最好搜索预先计算的键列表以查找有问题的记录的索引:

>>> 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)
Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法