一、算法简介之二分法

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函数,可为迭代对象进行基础运算
'''

最新文章

  1. ComboBox(下拉列表框)实现省、市、县三级联动,用hibernate连接数据库
  2. 改善过多的if else
  3. iOS设计模式之组合模式
  4. 《将博客搬至CSDN》的文章,
  5. spring beans源码解读之 ioc容器之始祖--DefaultListableBeanFactory
  6. 如何配置LCD背光和LED,调试方法
  7. Thinking in C++: Pointers to members 指向成员的指针
  8. SWFUpload的使用及其注意事项
  9. web从入门开始(2)----基础
  10. mongo索引
  11. C# -- 使用 DriveInfo 获取磁盘驱动器信息
  12. docker简单介绍----Dockerfile命令
  13. css属性position: static|relative|absolute|fixed|sticky简单解析
  14. bufferedwriter写json文件中文乱码
  15. nginx配置socket服务
  16. CSS----盒子模型与浮动
  17. java结合js获取验证码
  18. 从云端到边缘 AI推动FPGA应用拓展
  19. ASP.NET MVC 3 Performance – on par with MVC 2
  20. C# 文件操作系列一

热门文章

  1. Java jdk常用工具集合
  2. 第五十三篇:Vue安装Element ui
  3. 集成 Redis &amp; 异步任务 - SpringBoot 2.7 .2实战基础
  4. KingbaseES R6 集群测试job管理测试
  5. 放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序
  6. Java 快速开发几 MB 独立 EXE,写图形界面很方便
  7. 微信公众号商城、小程序商城、H5商城 实例 前后端源码
  8. 4.云原生之Docker容器数据持久化介绍与实践
  9. 在 Kubernetes 上运行高可用的 Kafka 集群
  10. 在 AlertManager 报警通知中展示监控图表