Python bisect
“bisect”这个词在编程里通常指 二分查找(binary search) 或 二分插入 的操作,在 Python 中有一个官方模块叫 bisect
,专门用来处理有序列表。
1. 基本概念
bisect 的意思是“把东西二分”,在编程中主要用于在有序列表中快速定位某个值的位置。
特点:
- 输入的列表必须是有序的。
- 查找或插入的复杂度是 O(log n),比线性查找快很多(O(n))。
2. Python 的 bisect
模块
Python 内置的 bisect
模块主要有两个常用函数:
import bisect# bisect.bisect_left(list, x)
# 返回 x 应该插入 list 的左侧位置,使列表仍保持有序# bisect.bisect_right(list, x) 或 bisect.bisect(list, x)
# 返回 x 应该插入 list 的右侧位置
示例:
import bisectarr = [1, 3, 4, 4, 5, 7]# 找到 4 应插入的位置
pos_left = bisect.bisect_left(arr, 4) # 返回 2(插入到第一个 4 的左边)
pos_right = bisect.bisect_right(arr, 4) # 返回 4(插入到最后一个 4 的右边)print(pos_left, pos_right) # 输出: 2 4
3. 插入操作
bisect
模块还有一个方便的函数 insort
,可以直接把元素插入列表中,同时保持列表有序:
import bisectarr = [1, 3, 4, 4, 5, 7]bisect.insort(arr, 4) # 默认使用右侧插入
print(arr) # 输出: [1, 3, 4, 4, 4, 5, 7]
总结
- bisect = 二分查找/二分插入
- 常用于 有序数组中快速定位位置
- 优点是 O(log n) 的查找效率
- Python 提供
bisect
模块封装了查找和插入操作