在 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 lstdata。 (也应避免使用 list,因为它会覆盖同名的 Python 内置函数)。