在 python 中使用二进制搜索函数对索引值进行排序
Sorting for index values using a binary search function in python
我的任务是设计一个 python 函数,该函数 return 是给定列表中给定项目的索引。它被称为 binary_sort(l, item) 其中 l 是一个列表(未排序或已排序),item 是您要查找其索引的项目。
这是我目前所拥有的,但它只能处理排序列表
def binary_search(l, item, issorted=False):
templist = list(l)
templist.sort()
if l == templist:
issorted = True
i = 0
j = len(l)-1
if item in l:
while i != j + 1:
m = (i + j)//2
if l[m] < item:
i = m + 1
else:
j = m - 1
if 0 <= i < len(l) and l[i] == item:
return(i)
else:
return(None)
如果给定一个未排序的列表和一个值作为参数,我该如何修改它以便 return 未排序的列表中的值的索引?
二分搜索(您可能给它起了个错误的名字——上面的算法不叫 "Binary Sort")——需要有序的序列才能工作。
它根本无法处理无序序列,因为排序允许它在每个搜索步骤中丢弃至少一半的项目。
另一方面,由于允许您使用 list.sorted
方法,这似乎是可行的方法:调用 l.sort()
将在开始搜索操作之前对目标列表进行排序,该算法将起作用。
附带说明一下,避免在程序中只调用任何东西 l
- 对于具有数学背景并且曾经在纸上做事的人来说,这可能是一个不错的列表名称 - 但在屏幕上,l
很难与 1
区分开来,并且导致源代码阅读不佳。这种情况下的好名字可以是 sequence
lst
或 data
。 (也应避免使用 list
,因为它会覆盖同名的 Python 内置函数)。
我的任务是设计一个 python 函数,该函数 return 是给定列表中给定项目的索引。它被称为 binary_sort(l, item) 其中 l 是一个列表(未排序或已排序),item 是您要查找其索引的项目。
这是我目前所拥有的,但它只能处理排序列表
def binary_search(l, item, issorted=False):
templist = list(l)
templist.sort()
if l == templist:
issorted = True
i = 0
j = len(l)-1
if item in l:
while i != j + 1:
m = (i + j)//2
if l[m] < item:
i = m + 1
else:
j = m - 1
if 0 <= i < len(l) and l[i] == item:
return(i)
else:
return(None)
如果给定一个未排序的列表和一个值作为参数,我该如何修改它以便 return 未排序的列表中的值的索引?
二分搜索(您可能给它起了个错误的名字——上面的算法不叫 "Binary Sort")——需要有序的序列才能工作。
它根本无法处理无序序列,因为排序允许它在每个搜索步骤中丢弃至少一半的项目。
另一方面,由于允许您使用 list.sorted
方法,这似乎是可行的方法:调用 l.sort()
将在开始搜索操作之前对目标列表进行排序,该算法将起作用。
附带说明一下,避免在程序中只调用任何东西 l
- 对于具有数学背景并且曾经在纸上做事的人来说,这可能是一个不错的列表名称 - 但在屏幕上,l
很难与 1
区分开来,并且导致源代码阅读不佳。这种情况下的好名字可以是 sequence
lst
或 data
。 (也应避免使用 list
,因为它会覆盖同名的 Python 内置函数)。