python基础day16 简单算法生成式及常见内置函数
算法之二分法
算法就是解决问题的高效办法
二分查找法
l = [1, 2, 32, 15, 16, 65, 6, 51, 12, 20, 95, 42, 61, 25, 3] # 查找列表中是否有66 1. for循环遍历 for i in l: if i = 66: print('找到了') 2.二分法实现 # 1. 先排序 l.sort() # 2.定义一个目标数据 target = 200 def my_half(target, 1): '''判断列表的长度是否为0''' if len(l) == 0: print('要找的数据不在列表中') return # 3. 从列表的中间取一个值 # 得到的是中间数据的索引值 middle_index = len(l)//2 # 整除 if target > l[middle_index]: # 说明目标数据在列表的右侧 l_right = l[middle_index + 1:] print(l_right) my_half(targht, l_right) elif targht < l[middle_index]: # 说明目标数据在列表左侧 l_left = l[: middle_index] print(l_left) my_half(targht, l_left) else: print('找到了') my_half(targht, l)
三元表达式
语法结构:
条件成立返回 if前面的值 if 条件 else 条件不成立返回else后面的值
使用场景:
只有当需求功能是二选一的情况下,才使用三元表达式
# 比较两个数的大小 res = 'boy' if 6 < 6 else 'girl' print(res)
还支持嵌套
is_beautiful = True res = '干饭' if 1 > 2 else ('学习' if False else ('喜欢' if is_beautiful == True else '不喜欢')) print(res)
列表生成式
name_list = ['kevin', 'jack', 'tom', 'jerry'] # 给每个名字后面加个_boy # re_name = [] # for i in name_list: # re_name.append('%s_boy' % i) # print(re_name) new_name_list = [name + '_boy' for name in name_list] print(new_name_list) res = [i+'_DSB' if i != 'tom' else i for i in name_list] print(res)
其他生成式
""" 补充一个方法:enumerate 1. 循环enumerate方法可以得到两个值 索引、元素 """ # for i, j in enumerate(l, start=2): # 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) # 元组 res1 = (i for i in enumerate(l)) # 生成器 print(res1)
匿名函数
就是没有名字的函数;之前使用def关键字定义的函数都是有名字函数
语法格式:
lambda 形参 :返回值
print((lambda a:a+2)(2))
一般不会单独使用,会配合几个常见的内置函数使用
常见的内置函数
map
# map # 底层就是for循环 L = ['jack', 'kevin'] print(list(map(lambda a: a + '_DSB', l))) L1 = [1, 3, 5, 7, 9] print((list(map(lambda b: b * 4, l1))))
zip
# zip 类似拉链 l = [1, 2, 3, 5, 9] l1 = ['kevin', 'age', 'hobby'] print(list(zip(l, l1))) for i, j in enumerate(l): # i代表索引位置 print(i, j)
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
# filter 过滤 l = [1, 2, 3, 4, 5, 6, 7, 8, 9] print(list(filter(lambda a: a != 5, l))) # [1, 2, 3, 4, 6, 7, 8, 9] print(list(filter(lambda a: a == 5, l))) # [5] print(list(filter(lambda a: a > 5, l))) # [6, 7, 8, 9] print(list(filter(lambda a: a < 5, l))) # [1, 2, 3, 4]

浙公网安备 33010602011771号