学习pytorch的torch.optim.lr_scheduler.MultiStepLR
类时,在它的源代码中遇到了这个模块,所以简单学习并记录。
首先需要说明的是,应用这个模块的函数前先要确保操作的列表是已排序的。
>>> 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']
可以看到里面只有六个函数,可分为两类讲解。
bisect
、bisect_left
、bisect_right
返回值是如果将数值插入已排序的列表时的插入位置,并不实际插入。
用于插入的数值并不在列表时的情况:
>>> bisect.bisect(list, 5)
2
>>> list
[2, 4, 7, 9]
这两个函数用于判断插入重复数值的情况,分别返回将数值插入重复数值左边和右边时的位置:
>>> bisect.bisect_left(list, 4)
1
>>> bisect.bisect_right(list, 4)
2
>>> list
[2, 4, 7, 9]
insort
、insort_left
、insort_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的操作结果是一样的,但其实插入的位置不同。