一、算法简介之二分法
1、什么是算法
算法是指数学运算,在python中算法是指数学运算和代码相结合,能够高效的解决一些问题
2、算法的应用场景
算法的应用场景非常广阔,在我们日常中的网购、抖音、拍照识别都是通过算法完成
3、二分法
什么是二分法:二分法是一直最基础的算法,通过将数据分割、比对来提高工作效率
缺陷:针对开头或结尾的数据,查找效率很低
代码用法:
# 设置一段列表 list_1 = [11, 22, 33, 44, 55, 66, 77, 88, 99, 101, 202, 303, 404, 505, 606, 707, 808, 909] # 定义想要查找的数据指 target_num = 505 # 6、使用递归函数循环重复查找 def func(list_1, target_num): # 7、添加结束条件 if len(list_1) == 0: print('这里没有你要的值') # 1、获取列表中间索引值 middle_index = len(list_1) // 2 # 2、比较目标数据值与列表中间数据值 if target_num > list_1[middle_index]: # 3、切片保留列表右边 r_list_1 = list_1[middle_index + 1:] # 针对目标值右边继续循环 return func(r_list_1, target_num) # 4、继续比较目标数据值 elif target_num < list_1[middle_index]: # 5、保留列表左侧 l_list_1 = list_1[:middle_index] # 针对目标值左边边继续循环 return func(l_list_1, target_num) # 5、当以上条件都不成立则说明目标数据中等于索引值 elif middle_index == len(list_1) // 2: print(f'找到了{target_num}') func(list_1, 505 ) -------------------------------------------------------------- 找到了 505
二、三元表达式
1、简介及用法
三元表达式是指,当结果是二选一的情况下我们可以做到优化代码使代码简写,当有多个条件和嵌套时不推荐使用
代码用法:
1.常规用法 name = 'kangkang' if name == 'kangkang': print('三好学生') else: print('普通学生') 2.三元表达式用法 name = 'kangkang' res = '三好学生' if name = 'kangkang' else '普通学生' print(res)
三、各种生成式
可以更加方便、快捷的对列表、字典、集合内数据值进行修改
1、列表生成式
可搭配for 、if 、range()等多种内置方法快速便捷生成需要的列表
# 设置一段列表 name_list = ['zhangshan', 'lisi', 'wangwu', 'zhangermazi'] # 条件:给上方列表内所有数据加上'YYDS' # 1、常规方式 for循环 new_name_list = [] for name in name_list: new_name_list.append(name + 'YYDS') print(new_name_list) ------------------------------------------------------------- ['zhangshanYYDS', 'lisiYYDS', 'wangwuYYDS', 'zhangermaziYYDS'] # 2、列表生成式用法 new_name_list = [name + 'YYDS' for name in name_list] print(new_name_list) ------------------------------------------------------------ ['zhangshanYYDS', 'lisiYYDS', 'wangwuYYDS', 'zhangermaziYYDS'] ''' 原理: # 普通的生成式 [表达式 for 变量 in 旧列表] # 加条件的生成式 [表达式 for 变量 in 旧列表 if 条件] # if...else条件的生成式 [表达式 if 条件1 else 条件2for 变量 in 旧列表] '''
进阶用法一:
new_name_list = [name + 'YYDS' for name in name_list if name == 'zhangshan'] print(new_name_list) ----------------------------------------------------------- ['zhangshanYYDS'] ''' 原理: 在基础用法上添加判断,在遍历后方添加条件,通过后进行修改数据值 '''
进阶用法二:
new_name_list = ['YYDS' if name == 'zhangshan' else 'DZD' for name in name_list if name != 'wangwu'] print(new_name_list) ------------------------------------------------------------- ['YYDS', 'DZD', 'DZD'] ''' 原理: 将相对于应位置,按条件更换数据值 '''
2、字典生成式
搭配enumerate使用
# 字典生成式 str1 = '开开心心' dict1 = {i: j for i, j in enumerate('开开心心', start= 10)} print(dict1) ------------------------------------------------------------ {10: '开', 11: '开', 12: '心', 13: '心'}
键值对互换
d1 = {'a':'A', 'b':'B', 'c':'C'} d2 = {v:k for k, v in d1.items()} print(d2 ) ------------------------------------------------------------- {'A': 'a', 'B': 'b', 'C': 'c'}
3、集合生成式
代码用法:#与列表生成式基本相同
# 普通的生成式 {表达式 for 变量 in 旧列表} # 加条件的生成式 {表达式 for 变量 in 旧列表 if 条件} # if...else条件的生成式 {表达式 if 条件1 else 条件2for 变量 in 旧列表}
四、匿名函数
1、什么是匿名函数
匿名函数是指没有函数名的函数,通常搭配在函数内或条件使用
2、匿名函数用法
关键字lambda
语法结构
lambda 形参:返回值
使用场景
lambda a,b:a+b
匿名函数一般不单独使用 需要配合其他函数一起用
五、常见内置函数
1、map()
代码用法: map(func,iterable) ''' func为函数名,可为lambda匿名函数,iterable为可迭代对象 此函数会将可迭代对象中的每一位元素作为参数传递到func中,并将func的计算结果加入到新列表内,map()返回的是一个包含所有结果的新列表。 ''' l1 = [1, 2, 3, 4, 5] def func(a): return a + 1 res = map(lambda x:x+1, l1) print(list(res)) -------------------------------------------------------------- [2, 3, 4, 5, 6]
2、max()、min()
代码用法: max(*args, key=None) ''' *args作为可迭代对象,key可为lambd匿名函数,可返回最大值 '''
3、reduce
代码用法: # 插入模块 from functools import reduce reduce(function, sequence, initial=_initial_missing) ''' function可为lambd函数,可为迭代对象进行基础运算 '''