栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python二分查找与插入模块bisect

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python二分查找与插入模块bisect

Python的二分查找与插入bisect模块,查询函数主要使用bisect.bisect(),bisect.bisect_left(),bisect.bisect_right(),插入函数主要使用bisect.insort()函数
参数输入格式都为(array, item)

其中bisect.bisect(),bisect.bisect_left(),bisect.bisect_right()用于查询目标值的最佳插入位置,三者的差异在于:

  1. 当查询的值在数组中且数组不重复时:bisect返回查询值所在下标+1,bisect_left返回查询值所在下标,bisect_right返回查询值所在下标+1(或者说是第一个比目标值大的元素坐标):
nums_1 = [1,2,3,4,5]
res_bisect = bisect.bisect(nums_1, 1)
res_left = bisect.bisect_left(nums_1, 1)
res_right = bisect.bisect_right(nums_1, 1)
print(res_bisect, res_left, res_right)

结果:1 0 1

  1. 当查询的值在数组中且数组有重复元素时时:bisect返回查询值重复最后一位的下标+1,bisect_left返回查询值第一次出现的下标,bisect返回查询值重复最后一位的下标+1(或者说是第一个比目标值大的元素的下标)
nums_2 = [1,2,2,3,4,5]
res_bisect = bisect.bisect(nums_2, 2)
res_left = bisect.bisect_left(nums_2, 2)
res_right = bisect.bisect_right(nums_2, 2)
print(res_bisect, res_left, res_right)

结果:3 1 3

  1. 当查询的值不在数组中时:bisect, bisect_left和bisect_right返回结果一致,如果在数组中间就返回第一个比查询值大的元素的下标,如果比所有元素小返回0,比所有元素大则返回数组长度。即返回一个最佳插入的位置。
nums_3 = [1,2,2,3,3,4,5]
res_bisect = bisect.bisect(nums_3, 2.5)
res_left = bisect.bisect_left(nums_3, 2.5)
res_right = bisect.bisect_right(nums_3, 2.5)
print(res_bisect, res_left, res_right)

结果:3 3 3

nums_4 = [1,2,2,3,3,4,5]
res_bisect = bisect.bisect(nums_4, 0)
res_left = bisect.bisect_left(nums_4, 0)
res_right = bisect.bisect_right(nums_4, 0)
print(res_bisect, res_left, res_right)

结果:0 0 0

nums_5 = [1,2,2,3,3,4,5]
res_bisect = bisect.bisect(nums_5, 6)
res_left = bisect.bisect_left(nums_5, 6)
res_right = bisect.bisect_right(nums_5, 6)
print(res_bisect, res_left, res_right)

结果:7 7 7


最后,为了保持有序数组,插入函数使用bisect.insort():

nums_6 = [1,2,3,4,4,5]
bisect.insort(nums_6, 4.3)
nums_6

结果:[1, 2, 3, 4, 4, 4.3, 5]

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835612.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号