bisect
bisect 模块提供了对有序列表进行二分查找的支持。它主要用于在有序列表中插入元素并保持列表的有序性。bisect 模块提供了两个主要函数:bisect_left 和 bisect_right,它们分别返回插入位置的左侧和右侧索引。
import bisect
# 示例列表
data = [1, 3, 4, 4, 6, 8]
# 使用 bisect_left 查找插入位置
index = bisect.bisect_left(data, 4) # 返回 2
data.insert(index, 4)
# 使用 bisect_right 查找插入位置
index = bisect.bisect_right(data, 4) # 返回 4
data.insert(index, 4)
print(data) # 输出: [1, 3, 4, 4, 4, 4, 6, 8]
bisect 模块适用于需要频繁插入元素并保持列表有序的场景,如维护一个有序的日志列表或事件列表。
array
array 模块提供了一个数组类型,它比列表更高效地存储同类型的数据。它与列表最大的区别是,array 数组中的元素类型必须在创建时指定,且所有元素必须为同一类型。
import array
# 创建一个整型数组
arr = array.array([1, 2, 3, 4, 5])
# 添加元素
arr.append(6)# 输出: array('i', [1, 2, 3, 4, 5, 6])
# 访问元素
print(arr[-1]) # 输出: 6
# 删除元素
arr.pop()
print(arr) # 输出: array('i', [1, 2, 3, 4, 5])
array 适用于需要高效存储大量同类型数据的场景,如数值计算或数据处理。
deque
deque 是 collections 模块中的一个双端队列实现,支持在队列的两端高效地进行添加和删除操作。deque 可以在任意一端进行 O(1) 时间复杂度的插入和删除操作。
from collections import deque
# 创建一个双端队列
d = deque([1, 2, 3])
# 在右侧添加元素
d.append(4)
# 在左侧添加元素
d.appendleft(0)
# 从右侧删除元素
d.pop()
# 从左侧删除元素
d.popleft()
print(d) # 输出: deque([1, 2, 3])
deque 适用于需要频繁在队列两端进行操作的场景,如实现一个高效的队列或栈,或者在需要快速插入和删除元素的场景中使用。
2000

被折叠的 条评论
为什么被折叠?



