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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python中bisect的用法

    本文实例讲述了Python中bisect的用法,是一个比较常见的实用技巧.分享给大家供大家参考.具体分析如下: 一般来说,Python中的bisect用于操作排序的数组,比如你可以在向一个数组插入数据的同时进行排序.下面的代码演示了如何进行操作: import bisect import random random.seed(1) print('New pos contents') print('-----------------') l=[] for i in range(1,15): r=r

  • python中sklearn的pipeline模块实例详解

    最近在看<深度学习:基于Keras的Python实践(魏贞原)>这本书,书中8.3创建了一个Scikit-Learn的Pipeline,首先标准化数据集,然后创建和评估基线神经网络模型,代码如下: # 数据正态化,改进算法 steps = [] steps.append(('standardize', StandardScaler())) steps.append(('mlp', model)) pipeline = Pipeline(steps) kfold = KFold(n_splits

  • Python decimal模块使用方法详解

    decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要从浮点数据转换为Decimal类型 from decimal import * Decimal.from_float(12.222) # 结果为Decimal('12.2219999999999995310417943983338773250579833984375') 3.通过设定有效数字,限定结果样式 from

  • Python日志处理模块logging用法解析

    logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等. 其主要优点如下: 1.可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息: 2.尤其是代码运行在服务器上,当出现问题时可以通过查看日志进行分析. logging模块基本使用: 设置logger名称 logger = logging.getLogger(log_name) 设置log级别 logger.setLevel(logging

  • python中bisect模块用法实例

    本文实例讲述了python中bisect模块用法,分享给大家供大家参考. 具体方法分析如下: 这个模块只有几个函数,一旦决定使用二分搜索时,立马要想到使用这个模块. 示例代码如下: import bisect L = [1,3,3,6,8,12,15] x = 3 x_insert_point = bisect.bisect_left(L,x)#在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回左侧位置1 print x_insert_point x_

  • Python实现清理微信僵尸粉功能示例【基于itchat模块】

    本文实例讲述了Python实现清理微信僵尸粉功能.分享给大家供大家参考,具体如下: 原理 通过Pyhton调用itchat模块登录网页版微信,给你所有好友发送特殊符号,对方收不到这个特殊符号,只要有人删了你,你的微信就会显示被删的人. 所需环境 Python3 itchat模块 安装 pip install itchat 使用 新建qf.py文件,拷贝下面代码,保存 import itchat import time itchat.auto_login(hotReload=True) # 热加载

  • Python实现二分查找与bisect模块详解

    前言 其实Python 的列表(list)内部实现是一个数组,也就是一个线性表.在列表中查找元素可以使用 list.index() 方法,其时间复杂度为O(n) .对于大数据量,则可以用二分查找进行优化. 二分查找要求对象必须有序,其基本原理如下: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 二分查找也

  • Python中bisect的使用方法

    Python中列表(list)的实现其实是一个数组,当要查找某一个元素的时候时间复杂度是O(n),使用list.index()方法,但是随着数据量的上升,list.index()的性能也逐步下降,所以我们需要使用bisect模块来进行二分查找,前提我们的列表是一个有序的列表. 递归二分查找和循环二分查找 def binary_search_recursion(lst, val, start, end): if start > end: return None mid = (start + end

  • 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,

  • Python subprocess模块功能与常见用法实例详解

    本文实例讲述了Python subprocess模块功能与常见用法.分享给大家供大家参考,具体如下: 一.简介 subprocess最早在2.4版本引入.用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值. subprocess用来替换多个旧模块和函数: os.system os.spawn* os.popen* popen2.* commands.* 运行python的时候,我们都是在创建并运行一个进程,linux中一个进程可以fork一个子进程,并让这个子进程ex

  • 关于python导入模块import与常见的模块详解

    0.什么是python模块?干什么的用的? Java中如果使用abs()函数,则需要需要导入Math包,同样python也是封装的,因为python提供的函数太多,所以根据函数的功能将其封装在不同的module模块中.就这样的话,pthon提供的module还是海量的,所以除非使用某个模块里的某个函数时才会将其导入程序中.所以你使用某个函数前,要先知道他在哪个module里,然后将这个模块导入当前程序,然后才能调用这个模块里的函数. 当然 python的模块分为用户自定义的和系统提供的.Pyth

  • Python csv模块使用方法代码实例

    这篇文章主要介绍了Python csv模块使用方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import csv def openSCV(filename): with open("renting.csv",'r',encoding = 'utf_8_sig') as f: f_csv = csv.reader(f) for row in f_csv: print(row) def Test1(): headers =

  • Python openpyxl模块原理及用法解析

    这篇文章主要介绍了Python openpyxl模块原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 此模块不是Python内置的模块需要安装,安装方法如下 pip install openpyxl 注意: 此模块只支持offce 2010,即是电子表格后缀是*.xlsx 1.openpyxl模块常用函数 import openpyxl wb = openpyxl.load_workbook('example.xlsx') ####

  • python copy模块中的函数实例用法

    1.copy.copy()函数可用于复制列表或字典等可变值,复制后的列表和原列表是两个独立的列表. import copy origin = [1,2,3] new = copy.copy(origin) new[0] = 0 print("origin = ",origin) print("new = ",new) 2.如果要复制的列表中有列表,则使用deepcopy()函数完全复制. import copy origin =[[1,2,3],['a','b','

  • python argparse模块传参用法实例

    目录 前言 传入一个参数 操作args字典 传入多个参数 改变数据类型 位置参数 可选参数 默认值 必需参数 前言 argsparse是python的命令行解析的标准模块,内置于python,不需要安装.这个库可以让我们直接在命令行中就可以向程序中传入参数并让程序运行. 港真的,今天是我第一次学习argsparse.因为用不到,自然也就没有学习的动力.但是现在电脑有点卡,每次打开pycharm太卡了,逼得我不得不开始使用命令行来测试代码. 传入一个参数 我们先在桌面新建“arg学习”的文件夹,在

  • Python XlsxWriter模块Chart类用法实例分析

    本文实例讲述了Python XlsxWriter模块Chart类用法.分享给大家供大家参考,具体如下: 一 点睛 Chart类是XlsxWriter模块中图表组件的基类,支持的图表类型包括面积.条形图.柱形图.折线图.饼图.散点图.股票和雷达等,一个图表对象是通过Workbook(工作簿)的add_chart方法创建,通过 {type,'图表类型'}字典参数指定图表的类型,语句如下: chart = workbook.add_chart({type, 'column'}) #创建一个column

  • Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解

    1.Python requests模块说明 requests是使用Apache2 licensed 许可证的HTTP库. 用python编写. 比urllib2模块更简洁. Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码. 在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作. 现代,国际化

  • Python Queue模块详细介绍及实例

    Python Queue模块 Python中,队列是线程间最常用的交换数据的形式.Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外. 创建一个"队列"对象 import Queue q = Queue.Queue(maxsize = 10) Queue.Queue类即是一个队列的同步实现.队列长度可为无限或者有限.可通过Queue的构造函数的可选参数maxsize来设定队列长度.如果maxsize小于1就表示队列长度无限. 将一个值放入队列中 q.p

随机推荐