一、用二分法实现in
def search(find_num, list): # 定义函数
if not list: # 判断传入列表是否为空
print('False')
return
mid_index = len(list) // 2 # 取中间索引值
if find_num == list[mid_index]: # 按中间索引值查找对应元素
print('True')
return
elif find_num > list[mid_index]: # 如果要查找的数值比中间索引值对应的值大
list = list[mid_index + 1:] # 切分列表
return search(find_num,list) # 递归调用自身
elif find_num < list[mid_index]:
list = list[:mid_index]
return search(find_num, list)
二、用二分法实现index()
def search(num, l, start=0, stop=len(l) - 1):
if start <= stop:
mid = start + (stop - start) // 2
if num > l[mid]:
start = mid + 1
elif num < l[mid]:
stop = mid - 1
else:
print(mid)
return
search(num, l, start, stop)
else: # 如果stop < start则意味着列表实际上已经全部切完,即切为空
print('False')
return