是否有一个库函数在列表/元组上执行二进制搜索并返回项目的位置(如果找到)和'False'(-1,None等),如果没有?
我在bisect模块中找到了函数bisect_left/right ,但即使该项不在列表中,它们仍会返回一个位置.这对于他们的预期用途来说非常好,但我只是想知道一个项目是否在列表中(不想插入任何内容).
我想过使用bisect_left然后检查那个位置的项目是否等于我正在搜索的项目,但这看起来很麻烦(我还需要检查边界是否可以大于我列表中的最大数字).如果有一个更好的方法我想知道它.
编辑为了澄清我需要这个:我知道字典非常适合这个,但我试图尽可能降低内存消耗.我的预期用法是一种双向查找表.我在表中有一个值列表,我需要能够根据它们的索引访问这些值.而且如果值不在列表中,我希望能够找到特定值的索引或None.
使用字典是最快的方法,但会(大约)加倍内存需求.
我在问这个问题,认为我可能忽略了Python库中的某些东西.正如Moe建议的那样,我似乎必须编写自己的代码.
我发现这篇文章:Python:在数组中查找元素
它是关于通过匹配值返回数组的索引.
另一方面,我所想做的是相似但不同的.我想找到目标值的最近值.例如我正在寻找4.2,但我知道在数组中没有4.2,但我想返回值4.1而不是4.4的索引.
这样做的最快方法是什么?
我正在考虑用旧的方式来做它,就像我以前用Matlab做的那样,它使用数组A,我想从索引到减去目标值并取绝对值,然后选择min.像这样: -
[~,idx] = min(abs(A - target))
Run Code Online (Sandbox Code Playgroud)
这是Matlab代码,但我是Python的新手,所以我在想,有没有一种快速的方法在Python中做到这一点?
非常感谢你的帮助!
known_array:numpy数组; 仅由标量值组成;shape: (m, 1)
test_array:numpy数组; 仅由标量值组成;shape: (n, 1)
indices:numpy数组; shape: (n, 1); 对于每个值,test_array查找最接近的值的索引known_array
residual:numpy数组; shape: (n, 1); 对于每个值,test_array找到与最接近的值的差异known_array
In [17]: known_array = np.array([random.randint(-30,30) for i in range(5)])
In [18]: known_array
Out[18]: array([-24, -18, -13, -30, 29])
In [19]: test_array = np.array([random.randint(-10,10) for i in range(10)])
In [20]: test_array
Out[20]: array([-6, 4, -6, 4, 8, -4, 8, -6, 2, 8])
Run Code Online (Sandbox Code Playgroud)
def find_nearest(known_array, value): …Run Code Online (Sandbox Code Playgroud) 我试图在 python 的排序列表中获取最接近的值及其索引。
在 MATLAB 中,可以通过以下方式实现:
[closest_val,index] = min(abs(array - target))
Run Code Online (Sandbox Code Playgroud)
我想知道是否有类似的方法可以在 python 中实现。
我见过同时执行其中一项或另一项的帖子,但我还没有看到两者同时完成。
链接到在列表帖子中查找最接近的值。