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(学习使我快乐)
elseprint (天天就知道学习)
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))
复制代码

 

  

 

posted @   Py玩家  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示