python 二分法查找字典中指定项第一次出现的索引

2021-03-04 10:29

阅读:514

标签:inf   arch   items   缩小   参数   pytho   内容   默认参数   value   

import time #引入time库,后续计算时间.
inform_m = {} #创建母字典
inform_s = {} #母字典下嵌套的子字典

#给母字典添加键-for i in range(1,100001):
    inform_m.setdefault(str(i),inform_s.fromkeys([name,sex,age],Undefined))

def search(dic = inform_m, content = Undefined): #设置dic content默认参数,dic为要查找的字典,content为要查找的内容
    time_b = time.time() #调用方法时记录启动时间

    num_key = dic.items()
    num_keys = len(num_key)
    num_begin = 1
    num_end = num_keys
    state = True
    i = off
    #初始化所有变量

    while state:
        if num_end == 1: #如果num_end == 1 判断第一项是否是我们要查找的。
            if dic[1][name] == content:
                num_end = 1
                state = False
                break
            else:
                num_end += 1
                state = False
                break
        value = dic[str(num_end)][name] #获取最后一项值
        if value == content: 
            value_b = dic[str(num_end - 1)][name] #获取前一项值
            if value == value_b: #如果查找到了content,进而判断前一项是否与content一样,如果一样,则缩小范围,继续查找。如果不一样,证明找到了那么就可以终止循环了
                if i == off: #i作为一个标准判断 num_begin 是否赋值,同学自己研究一下为什么要判断这个
                    num_end = num_end // 2
                else:
                    num_m = num_begin
                    num_end = (num_end - num_m + 1) // 2 + num_begin
            else:
                state = False
        else:
            if num_end == num_keys:
                state = False
            else:
                i = on
                num_m = num_begin
                num_begin = num_end
                num_end = (num_end - num_m + 1) // 2 + num_begin

    time_e = time.time()
    print(调用二分查找算法开始时间:{}   结束时间:{}.format(time_b,time_e))
    return num_end

def normal():
    time_bb = time.time()
    for ii in range(1,100001):
        
        value = inform_m[str(ii)][name]
        if value == Undefined:
            break
        else:
            pass
    time_ee = time.time()
    print(调用普通算法开始时间:{}   结束时间:{}.format(time_bb,time_ee))
    return ii


for j in range(1,94181): #给字典中的项赋值
    inform_m[str(j)][name] = Jobs

print(search(),normal())

 

python 二分法查找字典中指定项第一次出现的索引

标签:inf   arch   items   缩小   参数   pytho   内容   默认参数   value   

原文地址:https://www.cnblogs.com/1314h/p/14358730.html


评论


亲,登录后才可以留言!