十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数
2020-12-13 06:24
标签:编号 hid with list bcd 功能 常用 适合 key 一、函数递归: 二、算法二分法 先将一个容器类型,分割一半看是否大于或者小于,然后分割出来,进行运算 三、三元表达式 四、列表生成式 五.字典生成式 六.匿名函数 七、内置函数 1.max(a,key)通常计算容器类型里面值大小 2.常用内置函数 十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数 标签:编号 hid with list bcd 功能 常用 适合 key 原文地址:https://www.cnblogs.com/wukai66/p/11178386.html 函数的递归:函数在调用阶段直接或间接的又调用自身
递归分为两个阶段
1.回溯:就是一次次重复的过程,这个重复的过程必须建立在每一次重复问题的复杂度都应该下降
直到有一个最终的结束条件
2.递推:一次次往回推导的过程
3.递归函数在运行过程中一定要有出口,否则会无限循环下去# 1.求4以内的和:
def sum_numbers(num):
if num == 1:
return 1
return num + sum_numbers(num - 1)
# 递归特点:函数内部自己调用自己:必须要有出口
nums = sum_numbers(4)
print(nums)
2.求age(1)=18,求age(5)
2 def age(n):
3 if n == 1: # 必须要有结束条件
4 return 18
5 return age(n-1) + 2
6 res = age(5)
7 print(res)
# 算法:解决问题的高效率的方法
l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
# num = 345
# for i in l:
# if num == i:
# print(‘find it‘)
# 二分法:容器类型里面的数字必须有大小顺序
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)
如:a=5 ,b =6,比较两个数大小
res = a if a>b else b 等同于
if a>b:
print(a)
else:
print(b)
需求:把列表l里面字符串都添加_sb
1. 第一种方法:
l = [‘tank‘,‘nick‘,‘oscar‘,‘sean‘]
# l1 = []
# for name in l:
# l1.append(‘%s_sb‘%name)
# # l1.append(name + ‘_sb‘) # 不推荐使用
# print(1)
#[‘tank_sb‘, ‘nick_sb‘, ‘oscar_sb‘, ‘sean_sb‘]
2.第二种方法:
res =[%s_sb %name for name in l ]
print(l)
#需求:将尾号有_sb都打印出来
l = [‘tank_sb‘, ‘nick_sb‘, ‘oscar_sb‘, ‘sean_sb‘,‘jason_NB‘]
res =[name for name in l if endswith("_sb")]
# [‘tank_sb‘, ‘nick_sb‘, ‘oscar_sb‘, ‘sean_sb‘]需求将下面两个列表合成字典
第一种方法:
l1 = [‘name‘, ‘password‘, ‘hobby‘]
l2 = [‘jason‘, ‘123‘, ‘DBJ‘, ‘egon‘]
d = {}
for i, j in enumerate(l1):
d[j] = l2[i] # i 是索引编号,j是l1列表所有值,然后添加到字典
print(d)
字典生成式方法:
l1 = [‘jason‘,‘123‘,‘read‘]
d = {i:j for i,j in enumerate(l1) if j != ‘123‘}
print(d)
# 匿名函数
"""没有名字的函数
匿名函数的特点:临时存在用完就没了
"""
def my_sum(x,y):
return x + y
# res = (lambda x,y:x+y)(1,2)
# print(res)
# func = lambda x,y:x+y
# print(func(1,2))
# :左边的相当于函数的形参
# :右边的相当于函数的返回值
# 匿名函数通常不会单独使用,是配合内置函数一起使用,并且只能适合单一函数
l = [1,2,3,4,5]
print(max(l)) # 内部是基于for循环的 最大值d = {
‘egon‘:30000,
‘jason‘:88888888888,
‘nick‘:3000,
‘tank‘:1000
}
print(max(d,key=lambda name:d[name])) max(参数,key键) 当输入key是比较的是字典值大小
比较薪资 返回人名print(min(d,key=lambda name:d[name]))
map zip filter sorted reduce
# 1.map 映射 将某个函数功能逐一添加到容器里面
l = [1,2,3,4,5,6]
# print(list(‘hello‘))
print(list(map(lambda x:x+5,l))) # 基于for循环
#2. zip 拉链 # 基于for循环 将数据合成列表里面元组
l1 = [1,2,]
l2 = [‘jason‘,‘egon‘,‘tank‘]
l3 = [‘a‘,‘b‘,‘c‘]
print(list(zip(l1,l2,l3))) # [(1, ‘jason‘, ‘a‘), (2, ‘egon‘, ‘b‘)]
3. filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果需要转换成列表,则可以使用list()来转换
# 需求: 求1-10之间的奇数
lis1t1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# .定义函数求奇数
def func(x):
return x % 2 == 1
# .调用filter()函数
result = filter(func, lis1t1)
print(list(result))
# [1, 3, 5, 7, 9]4. reduce(func,lst),其中func必须要有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
list1 = [1, 2, 3, 4, 5, 6]
# .导入模块
import functools
# .定义函数功能
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result)
# 21
# 5.sorted(self,reverse = True或False) 正常是升序
l = [1,2,3,4,5,6,7]
print(sorted(l,reverse=True)# 4.sorted(self,reverse = True或False) 正常是升序
reverse=False 是逆置
文章标题:十一、函数递归,算法二分法,三元表达式,列表字典生成式,匿名函数,内置函数
文章链接:http://soscw.com/essay/32964.html