是否有一个库函数在列表/元组上执行二进制搜索并返回项目的位置(如果找到)和'False'(-1,None等),如果没有?
我在bisect模块中找到了函数bisect_left/right ,但即使该项不在列表中,它们仍会返回一个位置.这对于他们的预期用途来说非常好,但我只是想知道一个项目是否在列表中(不想插入任何内容).
我想过使用bisect_left然后检查那个位置的项目是否等于我正在搜索的项目,但这看起来很麻烦(我还需要检查边界是否可以大于我列表中的最大数字).如果有一个更好的方法我想知道它.
编辑为了澄清我需要这个:我知道字典非常适合这个,但我试图尽可能降低内存消耗.我的预期用法是一种双向查找表.我在表中有一个值列表,我需要能够根据它们的索引访问这些值.而且如果值不在列表中,我希望能够找到特定值的索引或None.
使用字典是最快的方法,但会(大约)加倍内存需求.
我在问这个问题,认为我可能忽略了Python库中的某些东西.正如Moe建议的那样,我似乎必须编写自己的代码.
我从算法的角度来看有一个问题.我有一个数字列表(浮点数)
1.22,3.2, 4.9,12.3.....and so on
Run Code Online (Sandbox Code Playgroud)
而且我想找到大于(比如说)4的最小数字.所以答案是4.9但除了明显的解决方案..(通过列表迭代并保持最小数量大于k的轨道)什么是"pythonic方式" " 去做这个.谢谢
我试图找到最近5年没有重复数字,我一直得到错误 'int' object has no attribute '__getitem__'
这是我的代码,我到目前为止 - 我无法弄清楚它有什么问题.任何解释如何解决它是值得赞赏的.
def find_year():
start = 2015
years = []
while len(years) < 5:
if start[0] == start[1]:
return False
elif start[0] == start[2]:
return False
elif start[0] == start[3]:
return False
elif start[1] == start[2]:
return False
elif start[1] == start[3]:
return False
elif start[2] == start[3]:
return False
else:
years.append(start)
start -= 1
else:
print years
find_year()
Run Code Online (Sandbox Code Playgroud)