在我看来,bisect_left和bisect_right是两种不同的方式来做同样的事情:二分法,一种是从左边来的,另一种是从右边来的。因此,它们的结果是相同的。在什么情况下,这两者是不相等的,即,假设列表和正在搜索的值是相同的,它们什么时候返回不同的结果?
发布于 2013-11-30 06:21:10
bisect.bisect_left返回排序列表中最左边的位置来插入给定的元素。bisect.bisect_right返回排序列表中插入给定元素的最右边位置。
另一个问题是,它们什么时候等效?通过回答这个问题,你的问题的答案就清楚了。
当要插入的元素不在列表中时,它们是等效的。因此,当要插入的元素在列表中时,它们并不等价。
发布于 2013-11-30 06:18:49
当要定位的目标在列表中时,bisect_left、bisect_right返回不同的结果。
例如:
>>> import bisect
>>> bisect.bisect_left([1,2,3], 2)
1
>>> bisect.bisect_right([1,2,3], 2)
2发布于 2019-06-07 09:50:27
在我看来,对bisect_left/bisect_right的这种解释更加明确:
bisect_left返回插入元素w.r.t的最大索引。<bisect_right返回插入元素w.r.t的最大索引。<=例如,如果您的数据是[0, 0, 0],并且查询0
bisect_left返回索引0,因为这是插入元素确实较小的最大的插入索引。bisect_right返回索引3,因为使用“较小或相等”的搜索是通过相同的元素进行的。可以将此行为简化为:
bisect_left将在相同元素的左边插入元素。bisect_right将在相同元素的右侧插入元素。https://stackoverflow.com/questions/20297249
复制相似问题