这篇文章主要介绍“python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么”文章能帮助大家解决问题。
前提:列表有序!!!
bisect()和bisect_right()等同,那下面就介绍bisect_left()和bisec_right()的区别!
用法:
index1 = bisect(ls, x) #第1个参数是列表,第2个参数是要查找的数,返回值为索引 index2 = bisect_left(ls, x) index3 = bisec_right(ls, x)
bisect.bisect和bisect.bisect_right返回大于x的第一个下标(相当于C++中的upper_bound),bisect.bisect_left返回大于等于x的第一个下标(相当于C++中的lower_bound)。
case 1
如果列表中没有元素x,那么bisect_left(ls, x)和bisec_right(ls, x)返回相同的值,该值是x在ls中“合适的插入点索引,使得数组有序”。此时,ls[index2] > x,ls[index3] > x。
import bisect ls = [1,5,9,13,17] index1 = bisect.bisect(ls,7) index2 = bisect.bisect_left(ls,7) index3 = bisect.bisect_right(ls,7) print("index1 = {}, index2 = {}, index3 = {}".format(index1, index2, index3))
程序运行结果为,
index1 = 2, index2 = 2, index3 = 2
case 2
如果列表中只有一个元素等于x,那么bisect_left(ls, x)的值是x在ls中的索引,ls[index2] = x。而bisec_right(ls, x)的值是x在ls中的索引加1,ls[index3] > x。
import bisect ls = [1,5,9,13,17] index1 = bisect.bisect(ls,9) index2 = bisect.bisect_left(ls,9) index3 = bisect.bisect_right(ls,9) print("index1 = {}, index2 = {}, index3 = {}".format(index1, index2, index3))
程序运行结果为,
index1 = 3, index2 = 2, index3 = 3
case 3
如果列表中存在多个元素等于x,那么bisect_left(ls, x)返回最左边的那个索引,此时ls[index2] = x。bisect_right(ls, x)返回最右边的那个索引加1,此时ls[index3] > x。
import bisect ls = [1,5,5,5,17] index1 = bisect.bisect(ls,5) index2 = bisect.bisect_left(ls,5) index3 = bisect.bisect_right(ls,5) print("index1 = {}, index2 = {}, index3 = {}".format(index1, index2, index3))
程序运行结果为,
index1 = 4, index2 = 1, index3 = 4
关于“python3二分查找库函数bisect(),bisect_left()和bisect_right()的区别是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程之家行业资讯频道,小编每天都会为大家更新不同的知识点。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。