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 bisect

arr = [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 bisect

arr = [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 模块封装了查找和插入操作

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐