Python基础之函数:4、二分法、三元表达式、生成/推导式、匿名函数、内置函数
一、算法简介之二分法
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函数,可为迭代对象进行基础运算
'''
Python基础之函数:4、二分法、三元表达式、生成/推导式、匿名函数、内置函数的更多相关文章
- python之三元表达式与生成式与匿名与内置函数(部分)
目录 三元表达式 各种生成式 列表生成式(可同样作用于集合) 字典生成式 匿名函数 重要内置函数 map() zip() filter() reduce() 常见内置函数(部分) 三元表达式 三元表达 ...
- day12——生成器、推导式、简单内置函数
day12 生成器 迭代器:python中内置的一种节省空间的工具 生成器的本质就是一个迭代器 迭代器和生成器的区别:一个是pyhton自带的,一个是程序员自己写的 写一个生成器 基于函数 在函数中将 ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础之生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...
- python基础12_匿名_内置函数
一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...
- python基础之递归,匿名,内置函数
递归函数: 什么是递归函数? 函数递归调用:在调用一个函数的过程中,又直接或间接地调用了该函数本身. 递归必须要有两个明确的阶段: ①递推:一层一层递归调用下去,强调:每进入下一层问题规模减少 ②回溯 ...
- pathon 基础学习-集合(set),单双队列,深浅copy,内置函数
一.collections系列: collections其实是python的标准库,也就是python的一个内置模块,因此使用之前导入一下collections模块即可,collections在pyt ...
- day19-1 迭代器,三元表达式,列表推导式,字典生成式,
目录 迭代器 可迭代对象 迭代器对象 总结 三元表达式(三目表达式) 列表推导式 字典生成式 迭代器 可迭代对象 拥有iter方法的对象就是可迭代对象 # 以下都是可迭代的对象 st = '123'. ...
- Python——day14 三目运算、推导式、递归、匿名、内置函数
一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系 cmd = input ...
随机推荐
- DL基础:cs231n assignment 2
cs231n assignment 2 20210913 - 20211005. 目录 cs231n assignment 2 fully-connected nets 基本思想 编程细节 复习mul ...
- 第三十八篇:vue3路由
好家伙,水博客怎么说 1.0.安装:简简单单的淘宝镜像安装 装一下淘宝镜像(一般都有) npm install -g cnpm --registry=https://registry.npm.taob ...
- 使用.Net对图片进行裁剪、缩放、与加水印
图片的裁剪.缩放.与加水印,是任何系统经常要用到的功能,它们现已集成到IUtility工具中,使用十分简便.(具体代码将在文末给出,支持.NET/.NET Framework/.NET Core) 现 ...
- 04_Linux基础-.&..-cat-tac-重定向-EOF-Shell-more-ps-less-head-tail-sed-grep-which-whereis-PATH-bash-usr-locate-find
04_Linux基础-.&..-cat-tac->&>>-EOF-Shell-more-ps-less-head-tail-sed-grep-which-wherei ...
- 完全解析Array.apply(null, { length: 1000 })
Array.apply(null, { length: 1000 }) 点击打开视频讲解更加详细 在阅读VueJS教程时有这么段demo code: render: function (createE ...
- Ros入门21讲
一.ROS是什么? ROS=通信机制+开发工具+应用功能+生态系统 目的:提高机器人研发中的软件复用率. 1.ROS中的通信机制 松耦合分布式通信: 注意:什么是耦合.紧耦合.松耦合? 1.1 耦合 ...
- 企业运维实践-丢弃手中的 docker build , 使用Kaniko直接在Kubernetes集群或Containerd环境中快速进行构建推送容器镜像
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 首发地址: h ...
- MyBatis标签之Select resultType和resultMap
摘要:介绍MyBatis 中Select标签的两个属性resultType和resultMap及其区别. 1 MyBatis动态SQL之if 语句 2 MyBatis动态sql之where标签|转 3 ...
- Django 之必知必会三板斧
一.HttpResponse 在django.http 模块中定义了HttpResponse 对象的API,HttpRequest 对象由Django 自动创建,不调用模板,直接返回数据. 1 在 a ...
- C语言大作业---学生信息管理系统
xxxx信息管理系统 简介 因为大作业规定的踩分项就那么多,为了不浪费时间 + 得分,就写成这样.现在看看,命名不规范,书写风格糟糕,全塞在一个源代码中······ 不过,应付大作业是没问题的 实验报 ...