Python-算法扩展:bisect模块
Python bisect模块用于有序列表的插值
1 bisect模块(内置库)
bisect模块实现了 二分 (bisection) 算法 的模块,能够 保持序列 sequence 顺序不变 的情况下对其进行 二分查找和插入,适合用于降低对冗长序列查找的时间成本
左侧插入点:元素elem在序列sequence合适的插入点,如果序列中已存在,则放在相同元素的左侧
右侧插入点:元素elem在序列sequence合适的插入点,如果序列中已存在,则放在相同元素的右侧
bisect模块 | 说明 |
---|---|
bisect_left(sequence, elem) -> index |
返回elem在sequence中左侧插入点的index |
bisect_right(sequence, elem) -> index |
返回elem在sequence中右侧插入点的index |
bisect() |
同 bisect_right()
|
insort_left(sequence, elem) -> index |
查找目标元素左侧插入点,并插入元素,直接修改原序列 |
insort_right(sequence, elem) -> index |
查找目标元素右侧插入点,并插入元素,直接修改原序列 |
insort() |
同insort_right()
|
1.1 示例:按成绩评分
from bisect import *
def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
i = bisect(breakpoints, score)
return grades[i]
ret = [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]] # 列表解析式 按成绩划分等级
>>>['F', 'A', 'C', 'C', 'B', 'A', 'A']