python基础16
算法之二分法
常见算法:二分法
算法还可以锻炼我们的思维逻辑能力
二份查找法
1 l = [11, 2, 3, 44, 55, 66, 77, 88, 99, 100, 23, 34, 45, 56, 67]
在列表中是否能找到66
1.for循环遍历
1 for i in l: 2 if i == 66: 3 print('找到了’)
2.二分法
算法不一定比其他方法高明
1 # 1. 先给l排序(sort) 2 l.sort() 3 # 2.定义一个目标值 4 flage = 88 5 def index(flage,l) 6 if len(l)==0: 7 print('不在列表中’) 8 # 3.中间取值,得到中间的索引 9 zjz = len(l)// 2 10 if flage > l[zjz]: 11 z=l[ :zjz] 12 13 index(flage,z) 14 elif flage < l[zjz] 15 z1=l[zjz; ] 16 index(flage,z1) 17 else: 18 print("找到了”) 19 index(flag,l)
三元表达式
比较两个数的大小
1 def index(a,b): 2 if a> b: 3 retrn a 4 else: 5 return b 6 index(1,2) 7 8 9 #三元表达式 10 def index(a,b) 11 return a if a > b else b 12 index(a,b)
语法结构
条件成立返回前面的值if条件else条件不成立返回else后面的值
三元表达式的使用场景
只有当二选一的情况下,才能使用三元表达式
res=‘干饭’ if 2>1else ‘不干饭’ print(res)
cmd=input(‘你是否喜欢干饭;y/n’) if cmd==‘y’: print(学习使我快乐) else: print (天天就知道学习) res= '学习使我快乐’ if cmd==‘y’ else ‘天天就知道学习’
它还可以支持嵌套
is_beautiful = True res = '干饭' if 1 > 2 else '学习' if False else '喜欢' if is_beautiful == True else '不喜欢' print(res)
一般情况我们在写代码的时候,尽量不要使用嵌套的情况,但是,嵌套一般出现在面试题中。
列表生成式
name_list = ['kevin', 'tank', 'tony', 'jerry'] # 1. 给列表中的所以名称加一个后缀_DSB # 2. 定义一个空列表用来存储拼接之后的值 new_name_list = [] # 3. 循环列表 for name in name_list: new_name_list.append('%s_DBS' % name) print(new_name_list) # 列表生成式 res = [name+'_DSB' for name in name_list] print(res) # 2. 定义一个空列表用来存储拼接之后的值 new_name_list = [] name_list = ['kevin', 'tank', 'tony', 'jerry'] # 2. 给列表中的所有名称都加一个后缀_DSB, 除了jerry不加 for name in name_list: if name != 'jerry': new_name_list.append('%s_DSB' % name) print(new_name_list) # 列表生成式 # res = ['%s_DSB' % name for name in name_list if name != 'jerry'] res = ['%s_DSB' % name if name != 'jerry' else name for name in name_list] print(res)
其他生成式
补充方法:enumerate
循环enumerate方法得到两个值索引、元素
for i,j in enumerate(l,start=0) print(i,j)
字典生成式
res={i:j for i ,j in enumerate(l)if j !=‘name’} print(res)
集合生成式
res={i for i,j in enumerate(l)} print(res)
匿名函数
没有名字的函数
之前使用def关键字定义的函数都是有名函数
语法格式
lambda 形参:返回值
res=lambda x:x+1 print((lambda x: x +1)(2))
使用场景
他一般不会单独使用,会配合jige常见的内置函数使用
常见内置函数
map() zip() max() min() filter() map() r = map(lambda i: i + '_DSA', name_list) print(list(r)) zip res=zip(l1, l2, l3, l4) # 拉链 # [(1, 'a', 'aa'), (2, 'b', 'bb'), (3, 'c', 'cc'), (4, 'd', 'dd')] print(list(res)) max min l1 = [1,2,3,4,5] print(max(l1)) print(min(l1)) s = ['kevin', 'tank', 'jerry'] print(max(s)) d = { 'kevin': 2000, 'tank': 1000, 'oscar': 300000, } def index(key): return d[key] print(max(d, key=index)) # tank print(max(d, key=lambda key: d[key])) # tank print(min(d, key=lambda key: d[key])) # tank filter:过滤 ll = [11, 22, 33, 44, 55] ls = [] for i in ll: if i > 30: ls.append(i) res=filter(lambda key: key > 30, ll) print(list(res))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY