Python基础——bisect模块

简介: 这个模块对有序列表提供了支持,使得他们可以在插入新数据仍然保持有序。

简介

这个模块对有序列表提供了支持,使得他们可以在插入新数据仍然保持有序。对于长列表,如果其包含元素的比较操作十分昂贵的话,这可以是对更常见方法的改进。这个模块叫做 bisect 因为其使用了基本的二分(bisection)算法。源代码也可以作为很棒的算法示例(边界判断也做好啦!)

bisect中有以下几个方法

  1. bisect
  2. bisect_left
  3. bisect_right
  4. insort
  5. insort_left
  6. insort_right

其中

  • bisect 就是调用的bisect_right
  • insort 就是调用 的insort_right

bisect 返回要插入元素在列表中的下标。假定列表是有序的。

bisect_left 与 bisect 类似,只不过其默认将元素插到左边,所以返回的是插入到左边的下标

bisect_right与 bisect_left 相反。

以上方法若列表无序,那么会返回插入到列表最后一个合适的位置。

insort 会在列表中插入元素到正确位置,假定列表有序。如果列表无序,那么会返回空。默认插入到右边。

insort_left 和insort_right 类似。

使用

bisect_left(a, x, lo=0, hi=None)

——其目的在于查找该数值将会插入的位置并返回,而不会插入。如果x存在在a中则返回x左边的位置

import bisect
li = [1, 23, 45, 12, 23, 42, 54, 123, 14, 52, 3]
li.sort()
print(li)
print(bisect.bisect_left(li, 3))
[1, 3, 12, 14, 23, 23, 42, 45, 52, 54, 123]
1

bisect_right(a, x, lo=0, hi=None) 等同于 bisect(a, x, lo=0, hi=None)

——其目的在于查找该数值将会插入的位置并返回,而不会插入。如果x存在在a中则返回x右边的位置

import bisect
li = [1, 23, 45, 12, 23, 42, 54, 123, 14, 52, 3]
li.sort()
print(li)
print(bisect.bisect(li, 3))
[1, 3, 12, 14, 23, 23, 42, 45, 52, 54, 123]
2

insort_left(a, x, lo=0, hi=None)  ——

在列表a中插入元素x,并在排序后保持排序。如果x已经在a中,把它插入右x的左边。

mport bisect
li = [1, 23, 45, 12, 23, 42, 54, 123, 14, 52, 3]
li.sort()
print(li)
bisect.insort_left(li, 3.0)
print(li)
[1, 3, 12, 14, 23, 23, 42, 45, 52, 54, 123]
[1, 3.0, 3, 12, 14, 23, 23, 42, 45, 52, 54, 123]

insort_right(a, x, lo=0, hi=None)  ——

在列表a中插入元素x,并在排序后保持排序。如果x已经在a中,把它插入右x的右边。

import bisect
li = [1, 23, 45, 12, 23, 42, 54, 123, 14, 52, 3]
li.sort()
print(li)
bisect.insort(li, 3.0)
print(li)
[1, 3, 12, 14, 23, 23, 42, 45, 52, 54, 123]
[1, 3, 3.0, 12, 14, 23, 23, 42, 45, 52, 54, 123
目录
相关文章
|
6天前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{"name": "John", "age": 30, "city": "New York"}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
13 1
|
8天前
|
Python 容器
python内置函数、数学模块、随机模块(二)
python内置函数、数学模块、随机模块(二)
|
8天前
|
索引 Python
python内置函数、数学模块、随机模块(一)
python内置函数、数学模块、随机模块(一)
|
10天前
|
人工智能 安全 Java
Python 多线程编程实战:threading 模块的最佳实践
Python 多线程编程实战:threading 模块的最佳实践
126 5
|
10天前
|
人工智能 数据库 开发者
Python中的atexit模块:优雅地处理程序退出
Python中的atexit模块:优雅地处理程序退出
10 3
|
13天前
|
存储 开发者 Python
Python中的argparse模块:命令行参数解析的利器
Python中的argparse模块:命令行参数解析的利器
16 2
|
13天前
|
开发者 Python
Python的os模块详解
Python的os模块详解
18 0
|
16天前
|
数据挖掘 API 数据安全/隐私保护
python请求模块requests如何添加代理ip
python请求模块requests如何添加代理ip
|
18天前
|
测试技术 Python
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
|
18天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
42 1