python - 如何实现二进制搜索以查找字典列表中的项目的索引
问题描述
我有一个包含字典的列表:
base = [
{"name": "Earth", "Density": 5.427},
{"name": "Mars", "Density": 5.513},
{"name": "Venus", "Density": 5.204},
]
name = input("What planet are you looking for? ")
该函数应返回项目(在本例中为行星)的索引,如果不存在则返回 -1。
F.e | For input= Earth, expected output would be: 0
For input = venus, expected output: 2
这binary search
是这项任务的必备条件。我什至没有给你我的代码,因为它甚至不起作用。我知道二进制搜索是如何工作的,但不知道如何在字典列表中使用它。PS。您不必编写整个代码,只需帮助我如何在字典列表中实现二元搜索。
解决方案
对于二进制搜索的每次迭代,它只是将您需要检查的项目数量减半,因此您是遍历树还是搜索列表并不重要。
如果要搜索的数据是简单整数、字典或复杂对象的列表,则无关紧要 - 如果您需要为下一个二进制印章选择“左”或“右”部分,则比较函数的工作是.
在您的情况下,您将找到数组的中间索引,在该位置获取字典并将 name 属性与您要查找的内容进行比较。如果项目不匹配,则使用递归将列表的左半部分或右半部分传递给相同的搜索函数。
这是递归二进制搜索算法的实现。
推荐阅读
- xamarin - 删除项目后 ListView 不更新其内容
- python - sessionid 缺失且 session_key=None
- javascript - 节点js示例中的工作流?
- python-3.x - “NoneType”对象没有属性“render_context”
- java - 如何使用 youtube API 实现 youtube 搜索
- python - optimizer.apply_gradients 不更新 TF 2.0 中的权重
- python - timeit 结果中运行次数和循环次数之间的差异
- c# - 关于序列化/反序列化的几个问题
- mysql - 在 Node Mysql (Discord.js) 中获取未定义的结果
- css - 隐藏前面图像之外的多余部分