在Python 3中,在排序的列表列表中进行二进制搜索是一种方式吗?
假设我有一份清单清单:
list = [['A', 'B', 3], ['C', 'D', 1], ['E', 'F', 2]]
我已使用内容列表中的3d元素对其进行排序:
list = sorted(list , key=itemgetter(2))
现在列表是
[['C', 'D', 1], ['E', 'F', 2], ['A', 'B', 3]]
现在如何使用内部列表中的元素进行排序,使用二进制搜索(O(log(n))时间复杂度搜索此排序列表? 像
findBy(list, index_of_inner_list, value_of_inner_list_to_find)
外面的名单很大。内部列表具有len 50.并且我需要进行许多查询以基于与内部列表相关的条件从外部列表中提取一些元素。我在考虑bisect
,但我认为内部数组会成为一个问题。
答案 0 :(得分:0)
我认为二分算法就足够了。
Python文档告诉我们
https://docs.python.org/3/library/bisect.html
此模块支持按排序顺序维护列表 无需在每次插入后对列表进行排序。对于长名单 对于昂贵的比较操作的物品,这可以是一个 改进比较常见的方法。该模块称为bisect 因为它使用基本的二分算法来完成它的工作。来源 代码可能是最有用的算法的工作示例( 边界条件已经是正确的!)。