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文件读取的3种方法及路径转义
Jun 21 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
PyQt5打开文件对话框QFileDialog实例代码
Feb 07 Python
python实现树形打印目录结构
Mar 29 Python
python对html过滤处理的方法
Oct 21 Python
python实现淘宝秒杀脚本
Jun 23 Python
python使用for循环计算0-100的整数的和方法
Feb 01 Python
python函数参数(必须参数、可变参数、关键字参数)
Aug 16 Python
详解Python文件修改的两种方式
Aug 22 Python
wxpython绘制音频效果
Nov 18 Python
深入浅析Python 函数注解与匿名函数
Feb 24 Python
Keras构建神经网络踩坑(解决model.predict预测值全为0.0的问题)
Jul 07 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
使用PHPWord生成word文档的方法详解
2019/06/06 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
寻找网站后台地址的python脚本
2014/09/01 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
Python namedtuple命名元组实现过程解析
2020/01/08 Python
大学生的网络创业计划书
2013/12/26 职场文书
司马光教学反思
2014/02/01 职场文书
监察建议书格式
2014/05/19 职场文书
市场营销策划方案
2014/06/11 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
小学语文教学反思范文
2016/03/03 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python