一.函数递归
函数递归:在调用阶段,函数func直接或间接调用本身
递归分为两个阶段:
1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降,直到有一个最终的结束条件
2.递推:一次次往回推导的过程
""" age(5) = age(4) + 2 age(4) = age(3) + 2 age(3) = age(2) + 2 age(2) = age(1) + 2 age(1) = 18 age(n) = age(n-1) + 2 # n > 1 age(1) = 18 # n = 1 """ # 递归函数 def age(n): if n == 1: #必须要有结果条件 return 18 return age(n-1) +2 res = age(5) print(res) 26
二.算法之二分法
算法:高效率解决问题的方法
# l = [1,3,5,12,33,57,89,110,128,147,168,174,188,345]
# num = 345
# for i in l:
# if num == i:
# print('find it')
二分法:容器类型里面的数字必须有大小顺序
l = [1,3,5,12,33,57,89,110,128,147,168,174,188,345] target_num = 666 def get_num(l,target_num): if not l: print('这点钱,很难帮你办事啊!') return # 获取列表中间的索引 print(l) middle_index = len(l) // 2 # 判断target_num跟middle_index对应的数字的大小 if target_num > l[middle_index]: # 切取列表右半部分 num_right = l[middle_index + 1:] # 再递归调用get_num函数 get_num(num_right,target_num) elif target_num < l[middle_index]: # 切取列表左半部分 num_left = l[0:middle_index] # 再递归调用get_num函数 get_num(num_left,target_num) else: print('find it',target_num) get_num(l,target)num)
三.三元表达式
三元表达式固定表达式
值1 if 条件 else 值2
条件成立 值1
条件不成立 值2
三元表达式的应用场景:只推荐在只有两种情况的可能下
def my_max(x,y): if x > y: return x else: return y """ 当 x 大的时候返回 x ,当 y 大的时候返回 y 当某个条件成立做一件事,不成立做另外一件事 """ x = 1 y = 2 res = x if x > y else y # 如果if后面的条件成立返回if前面的值,否则返回else后面的值 print(res)
is_free = input('请输入是否免费(y/n)>>>:') is_free = '免费' if is_free == 'y' else '收费' print(is_free)
四.列表生成式
# 在name后面加上_nb
l = ['tank','nick','egon','jason']
l1 = []
for name in l:
l1.append('%s_nb'%name)
print(l1)
# 列表生成式
l = ['tank_nb','nick_nb','egon_nb','jason_nb']
res = ['%s_plus'%name for name in l]
print(res)
l = ['tank_nb', 'nick_nb', 'egon_nb','jason_verynb']
# 排除列表中不同的那个
res = [name for name in if name.endswith('_nb')] # 后面不支持加else
print(res)
# 先for循环依次去除列表里面的每一个元素
# 然后交由if判断,条件成立才会交给for前面的代码
# 如果条件不成立,当前的元素,直接舍弃
五.字典生成式
# 创建两个列表
l1 = ['name','password','hobby']
l2 = ['jason','123','dbj']
# 创建一个空字典
d = { }
# for循环:
for i,j in enumerate(l1):
d[j] = l2[i]
print(d)
六.匿名函数
匿名函数:没有名字的函数
特点:临时存在 用完就没了
lambda 关键词
def my_sum(x,y): return x + y res = (lambda x,y:x+y) (1,2) print(res) func = lammda x,y:x+y print(func(1,2)) # :左边的相当于函数的形参 # :右边的相当于函数的返回值 # 匿名函数通常不会单独使用,是配合内置函数一起使用的
七.常用的内置函数
l = [1,2,3,4,5]
print(max(l)) # 内部基于for循环
"""
A-Z 65 90
a-z 97 122
"""
print(chr(97))
d = {
'egon':38888,
'jason':88888,
'nick':26888,
'tank':16888,
}
def index(name):
return d[name]
print (max(d,key=lambda name:d[name]))
# 比较薪资 返回人名
print(min(d,key=lambda name:d[name]))
# map 映射
l = [1,2,3,4,5,6
print(lisr(map(lambda x:x+5,1))) # 基于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 初始值 第一个参数
# 当初始值不存在的情况下,按照下面的规律
# 第一次先获取两个元素,相加
# 之后每次获取一个与上一个相加的结果再相加