Python bisect模块原理及常见实例

 更新时间:2020年06月17日 15:04:31   作者:后来者2012  
这篇文章主要介绍了Python bisect模块原理及常见实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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 解析XML文件

    Python 解析XML文件

    google一篇关于Python解析XML文件的博文不过XML文件出错,整理如下。
    2009-04-04
  • Python中的模块导入和读取键盘输入的方法

    Python中的模块导入和读取键盘输入的方法

    这篇文章主要介绍了Python中的模块导入和读取键盘输入的方法,相关import语句和input函数的使用是Python入门学习中的基础知识, 需要的朋友可以参考下
    2015-10-10
  • 使用Atom支持基于Jupyter的Python开教程详解

    使用Atom支持基于Jupyter的Python开教程详解

    这篇文章主要介绍了使用Atom支持基于Jupyter的Python开发,Vscode虽然说也有连接Jupyter的工具,但是交互式的开发Hydrogen体验更好,需要的朋友可以参考下
    2021-08-08
  • 使用python scrapy爬取天气并导出csv文件

    使用python scrapy爬取天气并导出csv文件

    由于工作需要,将爬虫的文件要保存为csv,以前只是保存为json,下面这篇文章主要给大家介绍了关于如何使用python scrapy爬取天气并导出csv文件的相关资料,需要的朋友可以参考下
    2022-08-08
  • python3.x读写文件及BOM处理详解

    python3.x读写文件及BOM处理详解

    这篇文章主要为大家详细介绍了python3.x读写文件及BOM处理的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • python3 常见解密加密算法实例分析【base64、MD5等】

    python3 常见解密加密算法实例分析【base64、MD5等】

    这篇文章主要介绍了python3 常见解密加密算法,结合实例形式分析了Python的base64模块加密,以及基于pycrypto模块的MD5加密等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • Python实现批量向PDF文件添加中文水印

    Python实现批量向PDF文件添加中文水印

    本文将通过设置批量PDF文件所在的路径及需要添加的水印名称,从而实现批量添加PDF水印的效果。感兴趣的小伙伴可以跟随小编一起动手试一试
    2022-02-02
  • Python语法糖for else循环语句里的break使用详解

    Python语法糖for else循环语句里的break使用详解

    这篇文章主要介绍了Python语法糖之for else循环语句里的break使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 浅析python 动态库m.so.1.0错误问题

    浅析python 动态库m.so.1.0错误问题

    这篇文章主要介绍了python 动态库m.so.1.0错误问题,文中给大家提到了python中使用动态库的方法,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Python集合union()函数使用实例详解

    Python集合union()函数使用实例详解

    union()方法的工作原理是:返回多个集合(集合的数量大于等于2)的并集,即结果集合包含了所有被合并集合中的所有元素,因为集合中的元素不可重复,所以各个集合中重复的元素在结果集合中只会出现一次,本文将简单介绍一下Python union()函数使用方法
    2023-07-07

最新评论