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 连连看连接算法
Nov 22 Python
python实现给字典添加条目的方法
Sep 25 Python
Python爬取读者并制作成PDF
Mar 10 Python
Python检查ping终端的方法
Jan 26 Python
python实现图片中文字分割效果
Jul 22 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
基于python及pytorch中乘法的使用详解
Dec 27 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
Python ADF 单位根检验 如何查看结果的实现
Jun 03 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
python与idea的集成的实现
Nov 20 Python
python中print格式化输出的问题
Apr 16 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中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
php 可变函数使用小结
2018/06/12 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
JS重要知识点小结
2011/11/06 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
js/jQuery实现全选效果
2019/06/17 jQuery
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
python3实现字符串操作的实例代码
2019/04/16 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python如何生成xml文件
2020/06/04 Python
python框架flask入门之路由及简单实现方法
2020/06/07 Python
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
主治医师岗位职责
2013/12/10 职场文书
大学生创业项目方案
2014/03/08 职场文书
六年级学生评语
2014/04/22 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
中标通知书格式
2015/04/17 职场文书
电工生产实习心得体会
2016/01/22 职场文书
Feign调用传输文件异常的解决
2021/06/24 Java/Android