1

有人可以解释一下 bisect 库中的 bisect_left 函数实际上是做什么的吗?例子:

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

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

4

2 回答 2

6

从 开始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

于 2021-02-17T20:21:27.667 回答
2

Bisect 维护一个按排序顺序排列的列表。如果您将一个项目插入到列表中,该列表仍然保持其顺序。

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

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

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

于 2021-02-17T20:16:01.243 回答