在 Python 中,二分查找是通过 bisect 模块轻松执行的。但是,如果需要精确指示列表中某个项目的存在,则 bisect_left 和 bisect_right 函数可能不够。
为了满足这一需求,Python 库不提供专门为二分搜索量身定制的专用函数明确的 True/False 输出。因此,需要一个自定义解决方案。
以下代码片段定义了 binary_search 函数,该函数对排序列表 a 执行二分搜索,并在找到时返回目标项 x 的索引。如果 x 不存在,则返回 -1:
from bisect import bisect_left def binary_search(a, x, lo=0, hi=None): if hi is None: hi = len(a) pos = bisect_left(a, x, lo, hi) # Find insertion position return pos if pos != hi and a[pos] == x else -1 # Check if x is there
此函数利用 bisect_left 来确定 x 的插入点。如果 x 存在于列表中,它将位于该插入点处。为了确认这一点,将插入点处的值与 x 进行比较。如果它们匹配,则找到 x,并返回其索引。否则,x 不存在,并返回 -1 来指示这一点。
此自定义函数提供了一种简洁高效的解决方案,用于执行二分搜索,并清楚地指示列表中项目是否存在,满足原始问题中确定的需求。
以上是如何在 Python 中高效地执行真/假二分查找?的详细内容。更多信息请关注PHP中文网其他相关文章!