Python bisect_left

Python bisect_left

谁能解释一下 bisect 库中的 bisect_left 函数到底做了什么?示例:

import bisect
bisect.bisect_left([1,2,3], 2)

此代码将打印“1”。但是这个打印的规则是什么? '2' 是否插入到列表中,因为根据 Python 文档,它应该“在列表中找到 x(在本例中为 2)的插入点以维护排序顺序”。拜托,也许有人可以提供更多示例并可以帮助我理解!谢谢!

Bisect 按排序顺序维护一个列表。如果您向列表中插入一个项目,列表仍会保持其顺序。

由于您的列表已经排序, bisect.bisect_left([1,2,3], 2) 将在列表中的第 2 项之后插入第 2 项(因为第 2 项已存在于列表中)。

您可以在此处找到有关“bisect”模块的更多信息:

https://docs.python.org/3/library/bisect.html

bisect 开始,一种用途(如 here 所示)是在一个列表中查找可用于取消引用相关列表的索引:

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_leftbisect 的操作方式相同,但在“平局”的情况下,它将 return 匹配项“左侧”的索引(例如,上例中的 70 分将使用 bisect_left)

映射到“D”