这个算法可以查找含重复元素的列表中序号靠前或者序号靠后的数字
def binarysearch(alist, item):
"""
:param alist: 排好序的列表
:param item: 查找元素
:return: 排好序列表序号靠前的元素
"""
if len(alist) == 0:
return -1
left, right = 0, len(alist) - 1
while left + 1 < right:
mid = left + (right - left) // 2
if alist[mid] == item:
right = mid
elif alist[mid] < item:
left = mid
elif alist[mid] > item:
right = mid
if alist[left] == item:
return left
if alist[right] == item:
return right
return -1
if __name__ == '__main__':
a = [1,2,2,4,5,6,7,8,9,10]
b = binarysearch(a, 2)
print(b)