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新手实现2048小游戏
Mar 31 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
详解Python:面向对象编程
Apr 10 Python
python2 对excel表格操作完整示例
Feb 23 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
Python常遇到的错误和异常
Nov 02 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
使用Python解决图表与画布的间距问题
Apr 11 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
web方式ftp
2006/10/09 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
js选项卡的实现方法
2015/02/09 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
js实现异步循环实现代码
2016/02/16 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
VUE中v-model和v-for指令详解
2017/06/23 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
使用Pycharm分段执行代码
2020/04/15 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
统计员岗位职责
2013/11/14 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
劳动保障事务所个人工作总结
2015/08/12 职场文书
创业计划书之美甲店
2019/09/20 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
html form表单基础入门案例讲解
2021/07/15 HTML / CSS
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis