Python 中的二进制搜索无法正常工作,仅显示列表中的某些项目
Binary search in Python not working properly, only displaying some items in list
我的代码工作不正常,只显示 3 个项目的正确结果,而不是第二个索引中的那个。我不会发布,但我是从 GCSE bitesize 页面上给出的 CS 伪代码开始的,当我在 Python 中转换时,它不起作用。
https://www.bbc.co.uk/bitesize/guides/zm77xfr/revision/3
my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list)
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
found == True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")
当我 运行 上面的代码并输入 'arnold' 时,我得到一条无限打印的 'item found' 消息,目前还可以。但是,如果我输入列表中的第二项,在本例中为 'matt',我会收到 'item not found' 消息显示
如果我输入 'david' 或 'james' 它也有效,所以它只是第二个索引中的项目。
我最初在 python 中转换了 GCSE bitesize 伪代码,但它甚至没有用。我真的很困惑,我不清楚为什么它不起作用,但感觉它与索引甚至中间变量有关。
有人可以指导我检查哪个部分吗?
您这里有一些问题需要解决。首先,二分查找需要对列表进行排序,这样比较(即my_list[mid] >= search_item
)才有意义。
接下来,您需要将 found == True
更改为 found = True
。你拥有它的方式只是一个比较,而不是将值设置为 True
.
它应该是这样的:
my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list) - 1
# ADD THIS
my_list.sort()
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
# CHANGE THIS
found = True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")
我的代码工作不正常,只显示 3 个项目的正确结果,而不是第二个索引中的那个。我不会发布,但我是从 GCSE bitesize 页面上给出的 CS 伪代码开始的,当我在 Python 中转换时,它不起作用。 https://www.bbc.co.uk/bitesize/guides/zm77xfr/revision/3
my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list)
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
found == True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")
当我 运行 上面的代码并输入 'arnold' 时,我得到一条无限打印的 'item found' 消息,目前还可以。但是,如果我输入列表中的第二项,在本例中为 'matt',我会收到 'item not found' 消息显示
如果我输入 'david' 或 'james' 它也有效,所以它只是第二个索引中的项目。
我最初在 python 中转换了 GCSE bitesize 伪代码,但它甚至没有用。我真的很困惑,我不清楚为什么它不起作用,但感觉它与索引甚至中间变量有关。
有人可以指导我检查哪个部分吗?
您这里有一些问题需要解决。首先,二分查找需要对列表进行排序,这样比较(即my_list[mid] >= search_item
)才有意义。
接下来,您需要将 found == True
更改为 found = True
。你拥有它的方式只是一个比较,而不是将值设置为 True
.
它应该是这样的:
my_list=['arnold', 'matt', 'david', 'james']
found = False
search_item = input("type a name to find")
start_range = 0
end_range = len(my_list) - 1
# ADD THIS
my_list.sort()
while found == False and start_range <= end_range:
mid = (start_range + end_range) //2
if search_item == my_list[mid]:
# CHANGE THIS
found = True
print("item found")
else:
if my_list[mid] >= search_item:
end_range = mid -1
else:
start_range = mid +1
if found == False:
print("item not found")