def binary_search(list, item):
# low and high keep track of which part of the list you'll search in.
low = 0
high = len(list) - 1
# While you haven't narrowed it down to one element ...
while low <= high:
# ... check the middle element
mid = (low + high) // 2
#得到商,并向下取整,比如3.5变成3;每次都检查中间的元素
guess = list[mid]
# Found the item.
if guess == item:#找到了元素
return mid
# The guess was too high.修改high
if guess > item:
high = mid - 1
# The guess was too low.修改low
else:
low = mid + 1
# Item doesn't exist
return None#没有指定的元素
my_list = [1, 3, 5, 7, 9]
print (binary_search(my_list, 3))
# => 1,返回3所在列表的索引位置,从0开始,所以3返回1;
#体会一下这种测试驱动开发的思想,先在代码后面写上用于测试的语句;
#先用伪代码理清逻辑,然后再补充好细节;
# 'None' means nil in Python. We use to indicate that the item wasn't found.
print (binary_search(my_list, -1))
# => None,因为不存在,所以返回None;
输出:
1
None