当前位置:   article > 正文

【Python笔记】bisect模块_numpy arr[biset_right]

numpy arr[biset_right]


这个模块只有几个函数,
一旦决定使用二分搜索时,立马要想到使用这个模块。

1 bisect模块简介

Python的列表(list)类型内部是一个线性表,在线性表中查找元素复杂度为O(N),即调用list.index()的复杂的是O(N)当数据量较大时应该使用二分查找优化二分查找范围每次缩小一般,复杂度为log(N),数据量越大速度差距越明显。

bisect模块就是基于二分实现的,二分查找要求列表是有序的bisect实现了在一个有序列表中①插入元素并保持列表为有序状态或②返回插入位置但并不进行实际的插入

bisect一共有6个函数:['bisect', 'bisect_left', 'bisect_right', 'insort', 'insort_left', 'insort_right'],使用这些函数前要确保操作的列表是有序的

import bisect
  • 1

2 bisect

其目的在于查找该数值将会插入的位置并返回,而不会插入

arr=[4,2,9,7]
arr.sort()
idx=bisect.bisect(arr,1)
print(arr,idx)

# 返回结果
[2, 4, 7, 9] 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3 bisect_left 和 bisect_right

bisect_leftbisect_right 函数,用入处理将会插入重复数值的情况,返回将会插入的位置

  • bisect_left(seq, x) x存在时返回x左侧的位置;
  • bisect_right(seq, x) x存在时返回x右侧的位置。
arr=[4,2,9,7]
arr.sort()

idx=bisect.bisect_left(arr,2)
print(arr,idx)

idx=bisect.bisect_left(arr,3)
print(arr,idx)

# 返回结果
[2, 4, 7, 9] 0
[2, 4, 7, 9] 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
arr=[4,2,9,7]
arr.sort()

idx=bisect.bisect_right(arr,2)
print(arr,idx)

idx=bisect.bisect_right(arr,3)
print(arr,idx)

# 返回结果
[2, 4, 7, 9] 1
[2, 4, 7, 9] 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

4 insort

排序很耗时,因此在得到一个有序序列之后,我们最好能够保持它的有序

insort(seq, item)把变量item插入到序列seq中,并能保持seq的升序顺序。

arr=[4,2,9,7]
arr.sort()

bisect.insort(arr,1)
print(arr)

# 返回结果
[1, 2, 4, 7, 9]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

5 insort_left 和 insort_right

insort_leftinsort_right 会进行实际的插入,保持seq的升序顺序。

  • insort_left(seq, x) x存在时插入在左侧插入;
  • insort_right(seq, x) x存在时在右侧插入。
arr=[4,2,9,7]
arr.sort()

bisect.insort_left(arr,2)
print(arr)

bisect.insort_right(arr,9)
print(arr)

# 返回结果
[2, 2, 4, 7, 9]
[2, 2, 4, 7, 9, 9]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Reference:https://www.cnblogs.com/ldy-miss/p/12061437.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/177531
推荐阅读
相关标签
  

闽ICP备14008679号