python bisect学习
官网链接: https://docs.python.org/zh-cn/3/library/bisect.html#module-bisect
1. bisect.bisect_left
所返回的是插入点的索引,以下图片来自官网:
1.1 x已经在a里存在
a = [1,2,3,4]
x = 4
bisect.bisect_left(a,x)
# 插入点的索引在原来4的左边,此时原来4的索引变为5
Out[38]: 3
a.insert(3,x)
a
Out[41]: [1, 2, 3, 4, 4]
1.2 x不存在a里
a = [1,2,3,5]
x = 4
bisect.bisect_left(a, x)
Out[44]: 3
1.3 查找的例子
官网给的查找例子
def index(a, x):
'Locate the leftmost value exactly equal to x'
i = bisect_left(a, x)
if i != len(a) and a[i] == x:
return i
raise ValueError
自己写的例子:
a = [1,2,3,4]
x = 5
# 从结果可以看出来,使用此函数如果不判断,会查找除出错误的结果
bisect.bisect_left(a, x)
Out[50]: 4
# 可采用此种方式判断,也可采用官网写的例子
if x in a:
print(bisect.bisect_left(a, x))
else:
print("x不存在a中")
x不存在a中
2. bisect.bisect_right
返回的插入点是 a 中已存在元素 x 的右侧。
a = [1,2,3,4]
x = 4
bisect.bisect_right(a, x)
Out[54]: 4
a = [1,2,3,4]
x = 5
bisect.bisect_right(a, x)
Out[60]: 4
3. bisect.bisect
以下图片来自官网,bisect.bisect同bisect.bisect_right函数,返回的插入点是 a 中已存在元素 x 的右侧。
a = [1,2,3,4]
x = 4
bisect.bisect(a, x)
Out[57]: 4