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 相关文章推荐
Python实现全角半角转换的方法
Aug 18 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
Python如何使用函数做字典的值
Nov 30 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
Apr 26 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
Python数据分析入门之数据读取与存储
May 13 Python
python b站视频下载的五种版本
May 27 Python
Python中文纠错的简单实现
Jul 07 Python
python使用torch随机初始化参数
Mar 22 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
一个简单的JavaScript数据缓存系统实现代码
2010/10/24 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
JavaScript获取一个范围内日期的方法
2015/04/24 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
Jquery表单验证失败后不提交的解决方法
2016/10/18 Javascript
Angular2环境搭建具体操作步骤(推荐)
2017/08/04 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
[02:10]2018DOTA2亚洲邀请赛赛前采访-Liquid
2018/04/03 DOTA
python中zip()方法应用实例分析
2016/04/16 Python
Python出现segfault错误解决方法
2016/04/16 Python
Unicode和Python的中文处理
2017/03/19 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python3实现定时任务的四种方式
2019/06/03 Python
Python的历史与优缺点整理
2020/05/26 Python
给民警的表扬信
2014/01/08 职场文书
护士辞职信模板
2014/01/20 职场文书
我的画教学反思
2014/04/28 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
班委竞选稿范文
2015/11/21 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript