实现一个有序数组的二分查找算法
def binary_search(lst, low, high, value):
if len(lst) == 0:
return False
if low <= high:
mid = int((low+high)/2)
if lst[mid] > value:
return binary_search(lst, low, mid, value)
elif lst[mid] < value:
return binary_search(lst, mid, high, value)
else:
return mid
if __name__ == '__main__':
lst = [9, 2, 4, 1, 5, 3, 7, 6, 8, 0]
print(binary_search(lst, 0, 9, 5))
实现模糊二分查找算法(比如大于等于给定值的第一个元素)
import re
def fuzzy_search(input, collection, accessor=lambda x: x):
suggestions = []
input = str(input) if not isinstance(input, str) else input
pat = '.*?'.join(map(re.escape, input))
regex = re.compile(pat)
for item in collection:
r = regex.search(accessor(item))
if r:
suggestions.append((len(r.group()), r.start(), accessor(item), item))
return (z[-1] for z in sorted(suggestions))