查找及其python代码实现

查找

python里的内置函数index()

list.index(x, start, end)
x-- 查找的对象。
start-- 可选,查找的起始位置。
end-- 可选,查找的结束位置。
List = ['123', 'abc', 'teacher', 'school']
print("abc索引位置: ", List.index('abc'))
print("123索引位置 : ", List.index( '123', 0, 3 ))
print("123索引位置 : ", List.index( '123', 2, 3 ))

在这里插入图片描述
从结果可以看出,当将123的搜索位置变化后,会显示无法搜索成功
事实上index()函数就是顺序查找,后续会提到

顺序查找

顾名思义,就是从第一个元素进行查找,找到返回下标,找不到则返回空值
时间复杂度:O(n)

def linear_search(li,val):
    for index,v in enumerate(li):
        if v == val:
            return index
        else:
            return None

但这种方法如果列表中有相同值,只会返回第一个值的下标,因此做了一下改进:

def linear_search2(li,val):
    shunxu =[]
    for index, v in enumerate(li):
        if v == val:
            shunxu.append(index)
    print(shunxu)
list = [2,5,6,8,2,5]
linear_search2(list,5)

有一个列表来存储下标,防止出现多个
在这里插入图片描述

二分查找

二分查找仅适用于有序列表,因此查找前需要利用sorted()函数进行排序

sorted()排序函数

sorted(li,reverse值)

reverse默认为False ,降序排序时reverse=True
注意sorted() 不会改变原列表,因此需要一个新列表来存储排序后的列表

li1 = [2,6,4,8,5]
li2 = sorted(li1)
print(li1,li2)

在这里插入图片描述

二分查找

二分查找又称折半查找,即在一个有序列表中,每次减少一半。有mid right left三个下标,每次mid为left和right的向下取整
若li[mid] > 待查找值,则将搜索区域缩小至左半边,即right = mid - 1
若li[mid] < 待查找值,则将搜索区域缩小至右半边,即right = left = mid + 1

def binary_search(li,val):
    left = 0
    right = len(li) - 1
    while left <= right:
        mid = (left + right) // 2 #整除
        if li[mid] == val:
            return mid
        elif li[mid] > val:
            right = mid - 1
        else:
            left = mid + 1
    else:
        return None

li = [2,1,3,4,5,6,7,8]
li = sorted(li,-1)
print(binary_search(li,5))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值