函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法
Posted cherish937426
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法相关的知识,希望对你有一定的参考价值。
1 递归函数
函数在调用阶段,直接或间接的调用了自身
递归函数不应该一直递归下去,我们不考虑它到底循环多少次,我们只考虑它的结束条件
递归函数分为两个阶段
1 回溯;就是一次次重复的过程,这个重复的过程,每一次都应该比上一次简单
2 地推;一次次往回推导的过程
2 二分法
可以在一个有序的序列,快速的查找一个元素;
b = [1,2,3,4,5,6] a = 3 def func(l,n): if not l: return ret = len(l) // 2 if n > l[ret]: list_r = l[ret+1:] func(list_r,n) elif n < l[ret]: list_l = l[0:ret] func(list_l,n) else: print("找到了") func(b,a)
3 三元表达式
格式;返回值1 if 条件 else 返回值2
条件成立;返回值1
条件不成立;返回值2
注意;三元表达式,不要嵌套嵌套,达不到三元表达式的效果,不简洁,不明了
x = 1 y = 2 ret = x if x > y else y print(ret)
4 列表生成式
先for循环依次取出列表里面的每一个元素
然后交由if判断 条件成立才会交给for前面的代码
如果条件不成立 当前的元素 直接舍弃
l = [1,2,3,4,5,6] ret = [i+1 for i in l] print(ret) # [2, 3, 4, 5, 6, 7]
ll = ["name","age","hobby","play.py"] ret1 = ["%s.py"%i for i in ll if i.endswith(".py")] #可以加if,但不可以加else 如果条件成立就取出那个值放入for前面的字符串中 print(ret1) #
ret2 = ["%sNb"%i for i in ret1]
print(ret2)
4 字典生成式
for 循环 enumerate括号容器类型的元素作为字典的键或者value
前面用“:”来接收这两个元素
ret = "%s.py"%j:"%s"%i for i,j in enumerate(["name","age","play","run"],) print(ret)
注意;
无论列表,生成式,或是字典生成式,都必须是能够for循环的
字典生成式,与列表生成式,最大的不同就是
列表是直接给for前面的变量接收,而字典前面接收的是两个变量,并且是以":"(冒号)连接
列表 in 后面直接跟容器类型,而字典后面 in 跟的是 enumerate(容器类型)
5 匿名函数
没有名字的函数
匿名函数的特点;临时用完,临时就没了
格式;lambda 变量1,变量2: 返回值
左变,相当于函数的形参
右边,相当于函数的返回值
注意;匿名函数常不会单独使用,经常和内置方法一起使用
6 常用内置方法
map 映射
l = [1,2,3,4,5,6]
print(list(map(lambda x:x+5,l))) # 基于for循环
zip 拉链 # 基于for循环 l1 = [1,2,] l2 = [‘jason‘,‘egon‘,‘tank‘] l3 = [‘a‘,‘b‘,‘c‘] print(list(zip(l1,l2,l3)))
l = [1,2,3,4,5,6] print(list(filter(lambda x:x != 3,l))) # 基于for循环
l = [‘jason‘,‘egon‘,‘nick‘,‘tank‘] print(sorted(l,reverse=True))
from functools import reduce l = [1,2,3,4,5,6] print(reduce(lambda x,y:x+y,l,19)) # 19初始值 第一个参数 # 当初始值不存在的情况下 按照下面的规律 # 第一次先获取两个元素 相加 # 之后每次获取一个与上一次相加的结果再相加
以上是关于函数的递归,二分法,三元表达式,列表生成式,字典生成式,匿名函数,内置方法的主要内容,如果未能解决你的问题,请参考以下文章
十一函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数
函数嵌套 ,名称空间与作用域 ,闭包函数 ,装饰器 ,迭代器, 生成器 三元表达式,列表解析,生成器表达式 递归与二分法, 内置函数