python 二分法查找字典中指定项第一次出现的索引
2021-03-04 10:29
标签:inf arch items 缩小 参数 pytho 内容 默认参数 value python 二分法查找字典中指定项第一次出现的索引 标签:inf arch items 缩小 参数 pytho 内容 默认参数 value 原文地址:https://www.cnblogs.com/1314h/p/14358730.htmlimport 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内存管理
文章标题:python 二分法查找字典中指定项第一次出现的索引
文章链接:http://soscw.com/index.php/essay/59951.html