Python bisect模块原理及常见实例


Posted in Python onJune 17, 2020

1. 模块介绍

1. bisect模块为内置标准库,它实现了二分法查找算法(只要提到二分法查找,应该优先想到此模块)

2. 主要包含有两个函数:bisect函数(查找元素)和insort函数(插入元素)。

2. 常用方法介绍

场景1:已知一个有序列表,查找目标元素的位置索引

import bisect

# 已知一个有序序列
ordered_list = [23, 34, 59, 78, 99]

des_element = 21
res = bisect.bisect(ordered_list, des_element)
print(res) # res: 0

des_element = 35
res = bisect.bisect(ordered_list, des_element)
print(res) # res: 2

说明:bisect函数会默认返回右侧的位置索引,同时bisect函数是bisect_right函数的别名。

场景2:已知一个有序列表,其中列表中有重复元素,查找目标元素的位置索引

import bisect

# 已知一个有序序列
ordered_list = [23, 34, 34, 59, 78, 99]

# bisect函数默认返回右侧的位置索引
des_element = 34
res = bisect.bisect(ordered_list, des_element)
print(res) # res: 3

# bisect函数为bisect_right函数的别名
des_element = 34
res = bisect.bisect_right(ordered_list, des_element)
print(res) # res: 3

# bisect_left函数默认返回左侧的位置索引
des_element = 34
res = bisect.bisect_left(ordered_list, des_element)
print(res) # res: 1

说明:如果目标元素会在已知有序列表中多次出现,那么目标元素从已知有序列表的左侧或右侧插入时结果是不同的。

3. 场景应用

场景1:替代if-elif语句,例如:判断考生成绩所属的等级问题。

'''
  考试成绩的档位划分,共分为5个等级:
    1. F等级:[0, 60)
    2. D等级:[60, 70)
    3. C等级:[70, 80)
    4. B等级:[80, 90)
    5. A等级:[90, 100]
'''

import bisect


def get_result(score: (int, float), score_nodes: list = [60, 70, 80, 90], ranks='FDCBA') -> str:

  # 校验:分数范围
  if score < 0 or score >100:
    return "score的取值范围:0-100"

  # 边界点考虑
  if int(score) == 100:
    return "A"

  loc_index = bisect.bisect(score_nodes, score)
  return ranks[loc_index]

print(get_result(50))    # res: F
print(get_result(60))    # res: D
print(get_result(85.5))   # res: B
print(get_result(100))   # res: A

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyQt4实现俄罗斯方块游戏
Jun 26 Python
由面试题加深对Django的认识理解
Jul 19 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
python opencv圆、椭圆与任意多边形的绘制实例详解
Feb 06 Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 Python
基于Tensorflow一维卷积用法详解
May 22 Python
django下创建多个app并设置urls方法
Aug 02 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
Jun 11 Python
Python使用Beautiful Soup(BS4)库解析HTML和XML
Jun 05 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 #Python
python能在浏览器能运行吗
Jun 17 #Python
python的pip有什么用
Jun 17 #Python
浅谈keras通过model.fit_generator训练模型(节省内存)
Jun 17 #Python
python用什么编辑器进行项目开发
Jun 17 #Python
在keras中model.fit_generator()和model.fit()的区别说明
Jun 17 #Python
python语言的优势是什么
Jun 17 #Python
You might like
PHP之autoload运行机制实例分析
2014/08/28 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
浅析PHP文件下载原理
2014/12/25 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
JavaScript函数详解
2014/11/17 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
常用jQuery选择器汇总
2017/02/02 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
angular 基于ng-messages的表单验证实例
2017/05/04 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
vue3.0中使用postcss-pxtorem的具体方法
2019/11/20 Javascript
js对象简介与基本用法示例
2020/03/13 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
Python的垃圾回收机制深入分析
2014/07/16 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
django Admin文档生成器使用详解
2019/07/22 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
Sony C++笔试题
2013/03/10 面试题
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
医院护士工作检讨书
2014/10/26 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
起诉意见书范文
2015/05/19 职场文书
Javascript设计模式之原型模式详细
2021/10/05 Javascript