首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bisect_left和bisect_right什么时候不相等?

bisect_left和bisect_right什么时候不相等?
EN

Stack Overflow用户
提问于 2013-11-30 06:18:04
回答 6查看 47K关注 0票数 50

在我看来,bisect_leftbisect_right是两种不同的方式来做同样的事情:二分法,一种是从左边来的,另一种是从右边来的。因此,它们的结果是相同的。在什么情况下,这两者是不相等的,即,假设列表和正在搜索的值是相同的,它们什么时候返回不同的结果?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-11-30 06:21:10

bisect.bisect_left返回排序列表中最左边的位置来插入给定的元素。bisect.bisect_right返回排序列表中插入给定元素的最右边位置。

另一个问题是,它们什么时候等效?通过回答这个问题,你的问题的答案就清楚了。

当要插入的元素不在列表中时,它们是等效的。因此,当要插入的元素在列表中时,它们并不等价。

票数 90
EN

Stack Overflow用户

发布于 2013-11-30 06:18:49

当要定位的目标在列表中时,bisect_leftbisect_right返回不同的结果。

例如:

代码语言:javascript
复制
>>> import bisect
>>> bisect.bisect_left([1,2,3], 2)
1
>>> bisect.bisect_right([1,2,3], 2)
2
票数 39
EN

Stack Overflow用户

发布于 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将在相同元素的右侧插入元素。
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20297249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档