是否有一个库函数可以在列表/元组上执行二分搜索,并返回找到项的位置,如果未找到则返回“False”(-1、None等)?
我在bisect module中找到了bisect_left/right函数,但是即使在列表中没有该项,它们仍然会返回一个位置。这对于它们预期的使用完全没问题,但我只想知道一个项目是否在列表中(不想插入任何东西)。
我考虑使用bisect_left
,然后检查该位置上的项目是否等于我正在搜索的项目,但是这似乎很麻烦(如果数字可能大于我的清单中最大的数字,我还需要进行边界检查)。如果有更好的方法,我想知道它。
编辑为了澄清我需要这个的原因:我知道字典非常适合这个任务,但我要尽可能地减少内存消耗。我的目的是创建一种双向查找表。我在表中有一列值,我需要能够根据它们的索引访问这些值。我还希望能够找到特定值的索引或None(如果该值不在列表中)。
使用字典将是最快的方法,但将(大约)加倍内存要求。
我问这个问题是因为我认为可能已经在Python库中忽略了一些东西。正如Moe建议的那样,看来我将不得不编写自己的代码。
np.searchsorted
是一个有用的函数。http://docs.scipy.org/doc/numpy/reference/generated/numpy.searchsorted.html - Roman Shapovalov