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 简单的股票基金爬虫

    python 简单的股票基金爬虫

    最近基金非常火爆,很多原本不投资、不理财人,也开始讨论、参与买基金了。根据投资对象的不同,基金分为股票型基金、债券基金、混合型基金、货币基金。所以今天我们就来看看,这些基金公司都喜欢买那些公司的股票。
    2021-06-06
  • Python通过Pygame绘制移动的矩形实例代码

    Python通过Pygame绘制移动的矩形实例代码

    这篇文章主要介绍了Python通过Pygame绘制移动的矩形实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python箱型图绘制与特征值获取过程解析

    Python箱型图绘制与特征值获取过程解析

    这篇文章主要介绍了Python箱型图绘制与特征值获取过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 如何用python 操作zookeeper

    如何用python 操作zookeeper

    这篇文章主要介绍了如何用python 操作zookeeper,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • Python后台开发Django的教程详解(启动)

    Python后台开发Django的教程详解(启动)

    这篇文章主要介绍了Python后台开发Django(启动),本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-04-04
  • python判断链表是否有环的实例代码

    python判断链表是否有环的实例代码

    在本篇文章里小编给大家整理的是关于python判断链表是否有环的知识点及实例代码,需要的朋友们参考下。
    2020-01-01
  • python 中的requirements.txt 文件的使用详情

    python 中的requirements.txt 文件的使用详情

    这篇文章主要介绍了python 中的requirements.txt文件的使用详情,文章围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python Web开发模板引擎优缺点总结

    Python Web开发模板引擎优缺点总结

    这篇文章主要介绍了Python Web开发模板引擎优缺点总结,需要的朋友可以参考下
    2014-05-05
  • python密码学换位密码及换位解密转置加密教程

    python密码学换位密码及换位解密转置加密教程

    这篇文章主要为大家介绍了python密码学换位密码及换位解密转置加密教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Python中property属性的用处详解

    Python中property属性的用处详解

    这篇文章主要给大家介绍了关于Python中property属性的相关资料,需简单地说就是一个类里面的方法一旦被@property装饰,就可以像调用属性一样地去调用这个方法,它能够简化调用者获取数据的流程,而且不用担心将属性暴露出来,有人对其进行赋值操作,下面要的朋友可以参考下
    2022-04-04

最新评论