在python中使用二进制搜索函数对索引值进行排序

2024-04-19 19:23:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是设计一个python函数,返回给定列表中给定项的索引。它被称为二进制排序(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)

如果给定一个未排序的列表和一个作为参数的值,如何修改它,使其返回未排序列表中值的索引?你知道吗


Tags: 函数false列表searchlenreturnif排序
1条回答
网友
1楼 · 发布于 2024-04-19 19:23:48

二进制搜索(你可能把它命名错了——上面的算法不叫“二进制排序”)——需要有序的序列才能工作。你知道吗

它根本无法处理无序的序列,因为排序允许它在每个搜索步骤中丢弃至少一半的项目。你知道吗

另一方面,既然允许您使用list.sorted方法,那么这似乎是一种可行的方法:调用l.sort()将在开始搜索操作之前对目标列表进行排序,并且算法将起作用。你知道吗

在旁注中,避免在程序中只调用任何东西l——对于有数学背景的人来说,这可能是一个很好的名字,用于在纸上做事情——但是在屏幕上,l很难从1伪装出来,并且会导致糟糕的源代码阅读。这个例子的好名字可以是sequencelst,或者data。(list也应该避免,因为它将重写具有相同名称的Python内置函数)。你知道吗

相关问题 更多 >