函数拓展及表达式
Posted cpsyche
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数拓展及表达式相关的知识,希望对你有一定的参考价值。
一.函数的递归
递归(recursion):在函数内部自己调用自己。
递归分为两个阶段:回溯和递推。
回溯:回溯一次,问题的复杂度就会进一步降低,直到终止条件成立,结束。
递推:从终止条件成立时,一次次的往回推导
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]] def get_num(l): for i in l: if type(i) is int: print(i) else: get_num(i) get_num(l)
pycharm导入import sys模块,通过sys.getrecursionlimit()方法,知道递归的层数默认值为1000,但是实际上只有997(从0开始)。
可以通过sys.setrecursionlimit()方法,指定递归层数。
两种代替代码块的方式:
第一种顶替方式 pass (推荐使用pass)
第二种顶替方式 ...
二.二分法
应用场景:在一个有序的容器内查找某个值
查找方法:每次查找都从中间开始进行比较。
l = [1,2,3,4,5,6,7,8,9,10] count =0 target= 5 def find_two (li,target) : global count print(count) print(li) count += 1 print(len(li)//2) middle = len(li) //2 if target < li[middle] : left = li [0:middle] find_two(left,target) elif target < li[middle] : right = li [middle+1:] print(right) find_two(right, target) elif li[middle] == target: print("find",count) find_two(l,target)
三.三元表达式
a if a > b else b
如果if后面的条件 成立返回前面的值,否则返回else后面的值
应用场景:在只有两种情况的条件下
四.生成式
1.列表生成式
格式:[变量名 for 变量名 in 容器类型 if 判断条件]
l = [‘tank‘,‘nick‘,‘oscar‘,‘sean‘] res = ["%s_rich" %i for i in l if i.endswith(‘k‘)] print(res)
2.字典生成式
格式:key: value for key: value in 容器类型 if 判断条件
l1 = [‘jason‘,‘18‘,‘dbj‘] res= i:j for i,j in enumerate(l1) if j != ‘18‘ print(res)
3.集合生成式
格式:变量名 for 变量名 in 容器类型 if 判断条件
print(i for i in range(10) if i != 9)
4.生成器表达式
格式:(变量名 for 变量名 in 容器类型 if 判断条件)
五.匿名函数简介
匿名函数:没有名字的函数,只能临时使用一次,用完地址就销毁。
lamba 函数参数 : 函数返回值
max(dic,key=lambda k:dic[k])
ps :匿名函数通常会配合其他函数使用。
六.常用内置函数
map(func, *iterables)映射函数
l = [1,2,3,4,5] print(list(map(lambda y:y+10,l))) # 容器类型的每一个元素调用前面的函数,并把返回值生成一个新的列表。
zip([iterable, ...]) 压缩函数
l1 = [1,2,] l2 = [‘jason‘,‘egon‘,‘tank‘] l3 = [‘a‘,‘b‘,‘c‘] zipper = list(zip(l1,l2,l3)) # 可以把多了容器类型中的对应的元素,以元祖的形式储存在列表中。返回值是个地址 #列表的长度取决于,容器类型中最短的那个。可以用list把zip对象转换成列表 print(zipper) print(list(zip(*zipper))) #可以用*把zip过程逆转
filter(function, iterable) 过滤函数
l = [1,2,3,4,5,6] print(list(filter(lambda y:y != 10,l))) # 通过条件过滤掉不想要的元素,然后生成一个新的列表
sorted(iterable, reverse = bool ):
l = [1,2,3,4,5,6] print(sorted(l,reverse=True)) #降序 print(sorted(l,reverse=False)) #升序
reduce(function, iterable, initia=None)
使用reduce函数需要from functools import reduce 导入函数
from functools import reduce l = [1,2,3,4,5,6] print(reduce(lambda x,y:x+y,l,19)) #匿名函数获取容器中的前两个值,如果容器非空的话就把初始值放在容器中的第一个 #然后再取出后面一个值,与和相加,直到拿到所有;列表加默认值之he。
以上是关于函数拓展及表达式的主要内容,如果未能解决你的问题,请参考以下文章