bisect库(Python)

144 阅读5分钟

biset库介绍

bisect 模块提供了一组函数,用于对有序列表进行二分查找。二分查找是一种高效的搜索算法,它通过不断地将列表分成两半来查找指定的元素。

bisect 模块函数

bisect 模块提供了以下函数:

  • bisect_left(list, x, lo=0, hi=None)
  • bisect_right(list, x, lo=0, hi=None)
  • insort_left(list, x, lo=0, hi=None)
  • insort_right(list, x, lo=0, hi=None)

bisect 模块函数说明

  • bisect_left() 函数用于在列表中查找指定元素的插入位置。如果列表中存在指定元素,则返回该元素的索引。如果列表中不存在指定元素,则返回该元素应该插入的位置。
  • bisect_right() 函数用于在列表中查找指定元素的插入位置。如果列表中存在指定元素,则返回该元素的索引。如果列表中不存在指定元素,则返回该元素应该插入的位置。
  • insort_left() 函数用于将指定元素插入到列表中。如果列表中存在指定元素,则将指定元素插入到该元素之前。如果列表中不存在指定元素,则将指定元素插入到该元素应该插入的位置。
  • insort_right() 函数用于将指定元素插入到列表中。如果列表中存在指定元素,则将指定元素插入到该元素之后。如果列表中不存在指定元素,则将指定元素插入到该元素应该插入的位置。

bisect 模块函数使用示例

# 导入 bisect 模块
import bisect
# 创建一个有序列表
list = [1, 3, 5, 7, 9]
# 在列表中查找元素 2 的插入位置
index = bisect.bisect_left(list, 2)
# 插入元素 2 到列表中
list.insert(index, 2)
# 在列表中查找元素 8 的插入位置
index = bisect.bisect_right(list, 8)
# 插入元素 8 到列表中
list.insert(index, 8)
# 打印列表
print(list)

输出结果:

[1, 2, 3, 5, 7, 8, 9]

bisect_left() 函数

bisect_left() 函数用于在列表中查找指定元素的插入位置。如果列表中存在指定元素,则返回该元素的索引。如果列表中不存在指定元素,则返回该元素应该插入的位置。

  • 语法
bisect.bisect_left(list, x, lo=0, hi=None)
  • 参数
  • list:需要查找元素的有序列表。
  • x:要查找的元素。
  • lo:查找的起始位置(默认值为 0)。
  • hi:查找的结束位置(默认值为 None,表示列表的最后一个元素)。
  • 返回值*:
  • 返回指定元素的索引,如果列表中不存在指定元素,则返回该元素应该插入的位置。
  • 示例*:
# 导入 bisect 模块
import bisect
# 创建一个有序列表
list = [1, 3, 5, 7, 9]
# 在列表中查找元素 2 的插入位置
index = bisect.bisect_left(list, 2)
# 打印插入位置
print(index)

输出结果:

1

bisect_right() 函数

bisect_right() 函数用于在列表中查找指定元素的插入位置。如果列表中存在指定元素,则返回该元素的索引。如果列表中不存在指定元素,则返回该元素应该插入的位置。

  • 语法
bisect.bisect_right(list, x, lo=0, hi=None)
  • 参数
  • list:需要查找元素的有序列表。
  • x:要查找的元素。
  • lo:查找的起始位置(默认值为 0)。
  • hi:查找的结束位置(默认值为 None,表示列表的最后一个元素)。
  • 返回值
  • 返回指定元素的索引,如果列表中不存在指定元素,则返回该元素应该插入的位置。
  • 示例
# 导入 bisect 模块
import bisect
# 创建一个有序列表
list = [1, 3, 5, 7, 9]
# 在列表中查找元素 2 的插入位置
index = bisect.bisect_right(list, 2)
# 打印插入位置
print(index)

输出结果:

1

insort_left() 函数

insort_left() 函数用于将指定元素插入到列表中。如果列表中存在指定元素,则将指定元素插入到该元素之前。如果列表中不存在指定元素,则将指定元素插入到该元素应该插入的位置。

  • 语法
bisect.insort_left(list, x, lo=0, hi=None)
  • 参数
  • list:需要插入元素的有序列表。
  • x:要插入的元素。
  • lo:插入的起始位置(默认值为 0)。
  • hi:插入的结束位置(默认值为 None,表示列表的最后一个元素)。
  • 返回值
  • 无。
  • 示例
# 导入 bisect 模块
import bisect
# 创建一个有序列表
list = [1, 3, 5, 7, 9]
# 将元素 2 插入到列表中
bisect.insort_left(list, 2)
# 打印列表
print(list)

输出结果:

[1, 2, 3, 5, 7, 9]

insort_right() 函数

insort_right() 函数用于将指定元素插入到列表中。如果列表中存在指定元素,则将指定元素插入到该元素之后。如果列表中不存在指定元素,则将指定元素插入到该元素应该插入的位置。

  • 语法
bisect.insort_right(list, x, lo=0, hi=None)
  • 参数
  • list:需要插入元素的有序列表。
  • x:要插入的元素。
  • lo:插入的起始位置(默认值为 0)。
  • hi:插入的结束位置(默认值为 None,表示列表的最后一个元素)。
  • 返回值
  • 无。
  • 示例
# 导入 bisect 模块
import bisect
# 创建一个有序列表
list = [1, 3, 5, 7, 9]
# 将元素 2 插入到列表中
bisect.insort_right(list, 2)
# 打印列表
print(list)

输出结果:

[1, 2, 3, 5, 7, 9]

总结

bisect 模块是一个非常有用的工具,可以提高代码的性能和可读性。在需要在有序列表中插入。