Python bisect模块原理及常见实例

作者:后来者2012 时间:2023-01-12 07:22:15 

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

来源:https://www.cnblogs.com/reconova-56/p/13124630.html

标签:python,bisect,模块
0
投稿

猜你喜欢

  • Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)

    2022-03-02 16:50:47
  • 用CSS实现柱状图(Bar Graph)的方法(三)——复杂柱状图的实现

    2008-05-26 13:36:00
  • MYSQL每隔10分钟进行分组统计的实现方法

    2024-01-22 13:56:42
  • 交互设计:简单

    2011-08-27 16:46:27
  • 如何设计高效合理的MySQL查询语句

    2024-01-22 04:17:21
  • MySQL如何通过Navicat实现远程连接

    2024-01-13 23:07:07
  • js判断设备是否为PC并调整图片大小

    2024-05-02 16:12:22
  • 教你使用Pycharm配置远程Jupyter

    2023-02-09 19:43:06
  • Python实现随机森林回归与各自变量重要性分析与排序

    2023-05-04 05:52:21
  • 5种禁用html页面的缓存方法

    2007-09-30 12:12:00
  • Python实现的使用telnet登陆聊天室实例

    2023-11-17 10:41:17
  • MySQL8设置自动创建时间和自动更新时间的实现方法

    2024-01-17 08:02:44
  • Golang如何编写内存高效及CPU调优的Go结构体

    2024-04-23 09:45:55
  • Python中字符编码简介、方法及使用建议

    2021-10-11 21:58:33
  • Python 中的pass语句语法详析

    2023-02-11 03:17:44
  • MySQL 数据类型详情

    2024-01-21 11:51:12
  • JS中call/apply、arguments、undefined/null方法详解

    2024-04-19 11:01:31
  • python统计文本字符串里单词出现频率的方法

    2021-11-10 17:38:48
  • 悟道Web标准:让W3C标准兼容终端

    2009-10-11 16:40:00
  • 关于Python3爬虫利器Appium的安装步骤

    2022-06-04 15:30:59
  • asp之家 网络编程 m.aspxhome.com