有人可以解释一下 bisect 库中的 bisect_left 函数实际上是做什么的吗?例子:
import bisect
bisect.bisect_left([1,2,3], 2)
此代码将打印“1”。但是这种印刷的规则是什么?是否在列表中插入了“2”,因为根据 Python 文档,它应该“在列表中定位 x(在本例中为 2)的插入点以保持排序顺序”。拜托,也许有人可以提供更多示例并帮助我理解!谢谢!
从 开始bisect
,一种用途(如此处所示)是在一个列表中找到一个索引,该索引可用于取消对相关列表的引用:
from bisect import bisect
def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
i = bisect(breakpoints, score)
return grades[i]
grades = [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
print(grades)
输出:
['F', 'A', 'C', 'C', 'B', 'A', 'A']
bisect_left
操作方式与“平局”相同,bisect
但在“平局”的情况下,它会将索引返回到匹配的“左侧”(例如,上例中的 70 分将使用 映射到“D” bisect_left
)
Bisect 维护一个按排序顺序排列的列表。如果您将一个项目插入到列表中,该列表仍然保持其顺序。
由于您的列表已经排序, bisect.bisect_left([1,2,3], 2) 将在列表中的 2 之后插入项目 2(因为项目 2 已经存在于列表中)。
您可以在此处找到有关“二等分”模块的更多信息: