zoukankan      html  css  js  c++  java
  • python 二分法查找字典中指定项第一次出现的索引

    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())
  • 相关阅读:
    正则表达式
    javascript if(条件)------------条件中可以使用的值
    maven配置
    获取中文日期
    Oracle无安装客户端安装方法
    Eclipse org.eclipse.compare plug-in
    Differences or similarities between Java and C++
    Java Programming Guidelines
    Native Method
    Object in Java same as pointer
  • 原文地址:https://www.cnblogs.com/1314h/p/14358730.html
Copyright © 2011-2022 走看看