python模块:bisect

学习pytorch的torch.optim.lr_scheduler.MultiStepLR类时,在它的源代码中遇到了这个模块,所以简单学习并记录。

1 模块结构

首先需要说明的是,应用这个模块的函数前先要确保操作的列表是已排序的。

>>> list = [4, 2, 7, 9]
>>> list.sort()
>>> list
[2, 4, 7, 9]

这个模块所包含的函数不多,如下所示:

>>> import bisect
>>> dir(bisect)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'bisect', 'bisect_left', 'bisect_right', 'insort', 'insort_left', 'insort_right']

可以看到里面只有六个函数,可分为两类讲解。

2 bisectbisect_leftbisect_right

返回值是如果将数值插入已排序的列表时的插入位置,并不实际插入。

2.1 bisect函数

用于插入的数值并不在列表时的情况:

>>> bisect.bisect(list, 5)
2
>>> list
[2, 4, 7, 9]

2.2 bisect_left和bisect_right函数

这两个函数用于判断插入重复数值的情况,分别返回将数值插入重复数值左边和右边时的位置:

>>> bisect.bisect_left(list, 4)
1
>>> bisect.bisect_right(list, 4)
2
>>> list
[2, 4, 7, 9]

3 insortinsort_leftinsort_right

插入数值,无返回值。

>>> bisect.insort(list, 5)
>>> list
[2, 4, 5, 7, 9]
>>> bisect.insort_left(list, 4)
>>> list
[2, 4, 4, 5, 7, 9]
>>> list = [2, 4, 5, 7, 9]
>>> bisect.insort_right(list, 4)
>>> list
[2, 4, 4, 5, 7, 9]

如果单看结果,insort_left和insort_right的操作结果是一样的,但其实插入的位置不同。

你可能感兴趣的:(python,bisect,bisect_right,bisect_left,insort,insort_left)