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())
python 二分法查找字典中指定项第一次出现的索引的更多相关文章
- 如何根据字典值的大小,对字典中的项排序---Python数据结构与算法相关问题与解决技巧
实际案例: 某班英语成绩以字典形式存储为: { 'LiLei' : 90, 'Jim' : 88, 'Lucy': 92 } 如何根据成绩高低,计算学生排名 -- 根据分数,进行排名,并且把排名信息添 ...
- python 学习笔记(三)根据字典中值的大小对字典中的项排序
字典的元素是成键值对出现的,直接对字典使用sorted() 排序,它是根据字典的键的ASCII编码顺序进行排序,要想让字典根据值的大小来排序,可以有两种方法来实现: 一.利用zip函数将字典数据转化为 ...
- Python二分法查找及变种分析
基于Python3 普通二分法查找目标值的index 二分法查找的思路很简单,先确定好列表nums的一头start一尾end,中间值middle根据头尾数值之和用地板除法除以2,即(start + e ...
- Ubuntu18.0 解决python虚拟环境中不同用户下或者python多版本环境中指定虚拟环境的使用问题
一. 不同用户下配置virtualenvwrapper的问题 问题描述: 安装virtualnev和virtualnevwrapper之后,在.bashrc进行virtualenvwrapper的相关 ...
- python 二分法查找思考理解小白向け
首先说一下二分法查找的思路.这是面向小白的课程,大佬请让步谢谢 给定一个有序的序列(必须是排好序的)例如[1,2,3,4,5,6,7,8,9,10,20,30,400],然后我们查询一个元素出现的坐标 ...
- python找出字典中value最大值的几种方法
假设定义一字典,m = {"a":3,"e":6,"b":2,"g":7,"f":7,"c ...
- python字典中添加项
body_daily_close = { "mappings": { "properties": { "trade_date": { &qu ...
- python字典中包含列表时:查找字典中某个元素及赋值
直接上代码: 运行效果:
- python 二分法查找实例(递归、循环)
二分法,主要应用于有序序列中,原理是每次查找都将原序列折半,逐渐缩小查找范围的一种算法. 需求 要求在一个有序序列中,例如[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30 ...
随机推荐
- canal的使用
一.简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实 ...
- redis主从复制(九)
先来简单了解下redis中提供的集群策略, 虽然redis有持久化功能能够保障redis服务器宕机也能恢复并且只有少量的数据损失,但是由于所有数据在一台服务器上,如果这台服务器出现硬盘故障,那就算是有 ...
- idea运行Tomcat出现 Address localhost:8080 is already in useAddress localhost:8080 is already in use
使用IDEA运行 tomcat时出现 Address localhost:8080 is already in use,就很奇怪,我明明只有这一个程序呀,怎么还会被占用.后来想想可能就是被其他进程占用 ...
- jenkins安装配置及发布
1. yum install -y lrzsz vim net-tools 2. 下载jdk-8u131-linux-x64.tar.gz http://www.oracle.com/technetw ...
- 【数据库Mysql 查询当前时间,年月日】
1.本年份 SELECT YEAR(now()) SELECT DATE_FORMAT(NOW(), '%Y') 2.本月份(例如:1.01.January) SELECT MONTH(now()) ...
- RapidEye快鸟、SPOT卫星遥感影像数据
目前地理遥感生态网平台已发布高分辨率卫星遥感影像数据. 数据样例:百度云下载链接:https://pan.baidu.com/s/17ofPwpDM3OCHnE-LuhvUp 提取码:i0m4 ...
- PTA(BasicLevel)-1094 谷歌的招聘
一.问题定义 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址, 而前面的网址是一个 10 位素数,这个素数 ...
- 【docker专栏5】详解docker镜像管理命令
一.国内Docker镜像仓库 由于大家都知道的原因,从国外的docker 仓库中pull镜像的下载速度实际上是很慢的.国内的一些一线厂商以及docker官方都在国内免费提供了一些docker镜像仓库, ...
- 001 Redis 配置
Redis缓存 1.配置Redis //Redis 配置文件 @Configuration public class RedisConfiguration { @Bean public RedisTe ...
- C++学习记录1
代码1:转义字符 点击查看代码 #include<iostream> using namespace std; void test01()//换行 { cout << &quo ...