【发布时间】:2020-01-24 23:03:04
【问题描述】:
引用自文档:
https://docs.python.org/3/library/bisect.html
与 sorted() 函数不同,它对 bisect() 没有意义 具有关键或反向参数的函数,因为这会导致 低效的设计(连续调用 bisect 函数不会 “记住”之前的所有键查找)。
相反,最好搜索预先计算的键列表以找到 相关记录的索引:
>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)] >>> data.sort(key=lambda r: r[1]) >>> keys = [r[1] for r in data] # precomputed list of keys >>> data[bisect_left(keys, 0)] ('black', 0)
但建议的解决方案适用于O(N)(创建键列表),不适用于O(logN)(假设需要为一个列表调用一次 bisect)。
是否有任何内置的二进制搜索,允许使用自定义键进行搜索?
(除了为传递的对象重载operator __lt__()。)
如果没有,那为什么 python 没有呢? (假设标语“包括电池”)
【问题讨论】:
-
标语“包括电池”不能意味着“包括所有可能的东西”,因为有无限可能的东西
标签: python python-3.x binary-search