内置函数、递归函数和匿名函数 1、python--------------内置函数 2、python---------------递归函数 3、python---------匿名函数

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
内置函数操作
1 #!usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # 1.locals()和globals() 4 # def func(): 5 # x=1 6 # y=2 7 # print(locals()) 8 # print(globals()) 9 # func() 10 11 # 2.eval,exec,和compile 12 # print(123) 13 # "print(456)"#字符串 14 # eval("print(456)")#吧字符串转换成python代码去执行(有返回值) 15 # exec("print(7889)")#吧字符串转换成python代码去执行(无返回值) 16 # num = eval('4+5+6')#执行了,有返回值 17 # print(num) 18 # 19 # num = exec('4+5+6')#执行了,没有返回值 20 # print(num) 21 # compile#做编译 22 # com=compile('1+2+3','',mode = 'eval')#节省时间 23 # print(eval(com)) 24 # print(eval('1+2+3'))#这句效果和上面的compile()效果一样 25 26 27 # 3.print 28 # print('123',end='')#不换行 29 # print('456',end='') 30 31 # print(1,2,3) 32 # print(1,2,3,4,5,6,sep=',') 33 34 35 36 # print()函数的小例子 37 # import time 38 # import sys 39 # for i in range(0,101,2): 40 # time.sleep(0.1) 41 # char_num = i//2 #打印多少个# 42 # per_str = '%s%% : %s ' % (i, '*' * char_num) if i == 100 else ' %s%% : %s'%(i,'*'*char_num) 43 # print(per_str,end='', file=sys.stdout, flush=True) 44 45 # import sys 46 # for i in range(0, 101, 2): 47 # time.sleep(0.1) 48 # char_num = i // 2 49 # per_str = ' %s%% : %s' % (i, '*' * char_num) 50 # print(per_str, file=sys.stdout, flush=True) 51 52 # 4.input() 53 # 5.type() 54 # 6.hash 55 # print(hash('asdsffd'))#一开始几个都是不变的,,然后重新运行一次就变了 56 # print(hash('asdsffd')) 57 # print(hash('asdsffd')) 58 # print(hash('asdsffd')) 59 # print(hash('asdsffd')) 60 # print(hash((1,2,3,4))) 61 62 # 7.open 63 # r,w,a,r+,w+,a+(都可以加b) 64 # f=open('tmp','r+')#r+打开文件 65 # print(f.read(3))#如果读了在写,追加 66 # f.seek(5)#如果seek指定了光标的位置,就从该位置开始覆盖这写 67 # f.write('aaaaaa')#如果直接写,从头覆盖 68 # f.close() 69 70 71 # 8.__import__() 72 # import os 73 # import sys 74 # import time 75 76 # 9.callable:查看能不能调用 77 # print(callable(123))#数字不能调用结果就是False 78 # print(callable(open))#函数可以调用就返回True 79 80 # 10.dir 查看数据类型的方法 81 # print(dir(__builtins__))#看着报错,,但其实不报错 82 # print(dir(int)) 83 # print(dir(list)) 84 # print(dir(0))#和int一样 85 # print(set(dir(list))-set(dir(tuple))) 86 # 11. 87 # num1=int(123) 88 # num2=int(12.3)#强制转换成int类型 89 # print(num1,num2) 90 # 12.取商/余 91 # print(divmod(7,3)) 92 # 13.计算最小值 93 # print(min(1,2,3,4)) 94 # print(min([5,6])) 95 # 13.计算最大值 96 # print(max(1,2,3,4)) 97 # print(max([5,6])) 98 99 # 14.sum求和 100 # print(sum(1,2,3,4))#出错了,参数是序列,散列不行 101 # print(sum([5,6])) 102 # print(sum((1,2,3,4))) 103 104 # 以下的两个方式是一样的 105 # print(1+2) 106 # print(int(1).__add__(2)) 107 108 # 15.round精确度 109 # print(round(3.1415926,2))#保留两位 110 111 112 # 16.pow()幂运算 113 # print(pow(2,3)) 114 # print(2**3) 115 116 117 # 17.和数据结构相关的 118 # 1.reversed()顺序的反转 119 # l=[1,2,3,4] 120 # print(list(reversed(l)))#是生成了一个新的列表,没有改变原来的列表(以后能不用reversed就不用reversed,用reverse) 121 # 122 # # l.reverse()#在现在的列表的基础上修改了,修改的是原来的列表 123 # print(l) 124 125 # 2.slice切片 126 # 3.format()#除了格式化以外 127 # print(format('test','<20')) 128 # print(format('test','>40')) 129 # print(format('test','^40')) 130 131 # 4.bytes 132 s='你好' 133 # sb=bytes(s,encoding='utf-8') 134 # print(sb) 135 # print(sb.decode('utf-8')) 136 137 # sb2=bytearray(s,encoding='utf-8') 138 # sb2[0]=229 #修改 了解就好 139 # print(sb2.decode('utf-8')) 140 # print(sb2) 141 # print(sb2[0]) 142 143 # 5.repr 144 # print(repr('1234')) 145 # print(repr(1234)) 146 # print('name:%r'%('egon'))#你怎么传进去的就按什么格式打印出来了 147 148 # 6.set和frozenset(不可变的集合)就像list和tuple 149 150 # 7.enumerate 151 # l=['a','b'] 152 # for i in enumerate(l): 153 # print(i) 154 # 155 # for i ,j in enumerate(l): 156 # print(i,j) 157 158 # 8.all和any 159 # print(all([1,2,3])) 160 # print(all([0,2,3]))#因为0是False 161 # 162 # print(any([1,2,3])) 163 # print(any([0,2,3])) 164 165 # 9.zip() 166 # l=[1,2,3] 167 # l2=[4,5,6,7,8] 168 # print(zip(l,l2)) 169 # print(list(zip(l,l2))) 170 # l3={'k':'v'} 171 # print(list(zip(l,l3))) 172 173 # 10.sort和sorted 174 # l=[1,3,5,-2,-6] 175 # l.sort() 176 # print(l) 177 # l2=[1,3,5,-2,-6] 178 # print(sorted(l2)) 179 # print(sorted(l2,key=abs)) 180 # print(sorted(l2,key=abs,reverse=True))#默认从小到大排序,修改为True,则从大到小排序 181 182 183 # 11.map():我要对我的列表当中的每一个值去做函数里面的操作 184 # l=[1,2,3,4,5] 185 # def pow2(x): 186 # return x*x 187 # print(list(map(pow2,l))) 188 189 190 # 12.filter():从一个列表当中找到所有符合筛选条件的,在组成一个新列表 191 # def aaa(x): 192 # return x%2==1 193 # ret=list(filter(aaa,[1,2,54,3,6,8,17,9])) 194 # print(ret)
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

https://www.processon.com/ 具体分类见此网站

2、python---------------递归函数

一、递归的定义

1.什么是递归:在一个函数里在调用这个函数本身

2.最大递归层数做了一个限制:997,但是也可以自己限制

1 def  foo():
2     print(n)
3     n+=1
4     foo(n)
5 foo(1)
验证997

3.最大层数限制是python默认的,可以做修改,但是不建议你修改。(因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决问题,要么就是你的代码太烂了)

1 import sys
2 sys.setrecursionlimit(10000000)#修改递归层数
3 n=0
4 def f():
5     global n
6     n+=1
7     print(n)
8     f()
9 f()
View Code

我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。

sys模块:所有和python相关的设置和方法

4.结束递归的标志:return

5.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模

6.使用场景:数据的规模在减少,但是解决问题的思路没有改变

7.很多排序算法会用到递归

二、递归小应用

1.下面我们来猜一下小明的年龄

小明是新来的同学,丽丽问他多少岁了。

他说:我不告诉你,但是我比滔滔大两岁。

滔滔说:我也不告诉你,我比晓晓大两岁

晓晓说:我也不告诉你,我比小星大两岁

小星也没有告诉他说:我比小华大两岁

最后小华说,我告诉你,我今年18岁了

这个怎么办呢?当然,有人会说,这个很简单啊,知道小华的,就会知道小星的,知道小星的就会知道晓晓的,以此类推,就会知道小明的年龄啦。这个过程已经非常接近递归的思想了。

小华 18+2
小星 20+2
晓晓   22+2
滔滔   24+2
小明  26+2

上面的图我们可以用个序号来表示吧

age(5) = age(4)+2
age(4) = age(3) + 2 
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18

那么代码该怎么写呢?

1 def age(n):
2     if n == 1:
3         return 18
4     else:
5         return age(n - 1) + 2
6 
7 ret=age(6)
8 print(ret)
View Code

2.一个数,除2直到不能整除2

1 def  cal(num):
2         if  num%2==0:#先判断能不能整除
3             num=num//2
4             return cal(num)
5         else:
6             return num
7 print(cal(8))
一个数,除2直到不能整除2

3.如果一个数可以整除2,就整除,不能整除就*3+1

1 def func(num):
 2     print(num)
 3     if num==1:
 4         return
 5     if num%2==0:
 6         num=num//2
 7     else:
 8         num=num*3+1
 9     func(num)
10 func(5)
如果一个数可以整除2,就整除,不能整除就*3+1

三、三级菜单

menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
 1 def threeLM(menu):
 2     while True:
 3         for key in menu:#循环字典的key,打印出北京,上海,山东
 4             print(key)
 5         name=input('>>>:').strip()
 6         if name=='back' or name=='quit':#如果输入back,就返回上一层。如果输入quit就退出
 7             return name #返回的name的给了ret
 8         if name in menu:
 9             ret=threeLM(menu[name])
10             if ret=='quit':return 'quit'#如果返回的是quit,就直接return quit 了,就退出了
11 threeLM()
12 # print(threeLM(menu))#print打印了就返回出quit了,threeLM()没有打印就直接退出了
三级菜单

四、二分查找算法 

从这个列表中找到55的位置l = 【2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88】

 内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

这就是二分查找,从上面的列表中可以观察到,这个列表是从小到大依次递增的有序列表。

按照上面的图就可以实现查找了。

简单的二分法
升级版二分法

一、匿名函数:也叫lambda表达式

1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行

2.参数可以有多个,用逗号隔开

3.返回值和正常的函数一样可以是任意的数据类型

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

二、匿名函数练习

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 请把下面的函数转换成匿名函数
2 def  add(x,y)
3         return x+y
4 add()
5 
结果: 6 sum1=lambda x,y:x+y 7 print(sum1(5,8))
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 dic = {'k1':50,'k2':80,'k3':90}
2 # func= lambda k:dic[k]
3 # print(max(dic,key=func))
4 print(max(dic,key = lambda k:dic[k]))#上面两句就相当于下面一句
比两个数的大小
1 3.map方法
2 l=[1,2,3,4]
3 # def func(x):
4 #     return x*x
5 # print(list(map(func,l)))
6 
7 print(list(map(lambda x:x*x,l)))
map方法的应用
1 l=[15,24,31,14]
2 # def func(x):
3 #         return x>20
4 # print(list(filter(func,l)))
5 
6 print(list(filter(lambda x:x>20,l)))
filter函数的小应用
 1 # 方法一
 2 t1=(('a'),('b'))
 3 t2=(('c'),('d'))
 4 # print(list(zip(t1,t2)))
 5 print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))
 6 
 7 # 方法二
 8 print(list([{i,j} for i,j in zip(t1,t2)]))
 9 
10 #方法三
11 func = lambda t1,t2:[{i,j} for i,j in zip(t1,t2)]
12 ret = func(t1,t2)
13 print(ret)
5.现有两个元组(('a'),('b')),(('c'),('d')), 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

三、列表推导式

1 6.30以内所有被3整除的数
2 print(list([i for i in range(30) if i%3==0]))
30以内能被3整除的数

三、字典推倒式

例一:将一个字典的key和value对调

1 mcase = {'a': 10, 'b': 34}
2 res1 = {i:mcase[i] for i in mcase}
3 res={mcase[i]:i for i in mcase }
4 print(res1)
5 print(res)
View Code

例二:合并大小写对应的value值,将k统一成小写

1 mcase = {'a':10,'b':34,'A':7}
2 res = {i.lower():mcase.get(i.lower(),0)+mcase.get(i.upper(),0) for i in mcase}
3 print(res)
View Code

四、集合推倒式

例:计算列表中每个值的平方,自带去重功能

1 l=[5,-5,1,2,5]
2 print({i**2 for i in l})
View Code
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
内置函数操作
1 #!usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # 1.locals()和globals() 4 # def func(): 5 # x=1 6 # y=2 7 # print(locals()) 8 # print(globals()) 9 # func() 10 11 # 2.eval,exec,和compile 12 # print(123) 13 # "print(456)"#字符串 14 # eval("print(456)")#吧字符串转换成python代码去执行(有返回值) 15 # exec("print(7889)")#吧字符串转换成python代码去执行(无返回值) 16 # num = eval('4+5+6')#执行了,有返回值 17 # print(num) 18 # 19 # num = exec('4+5+6')#执行了,没有返回值 20 # print(num) 21 # compile#做编译 22 # com=compile('1+2+3','',mode = 'eval')#节省时间 23 # print(eval(com)) 24 # print(eval('1+2+3'))#这句效果和上面的compile()效果一样 25 26 27 # 3.print 28 # print('123',end='')#不换行 29 # print('456',end='') 30 31 # print(1,2,3) 32 # print(1,2,3,4,5,6,sep=',') 33 34 35 36 # print()函数的小例子 37 # import time 38 # import sys 39 # for i in range(0,101,2): 40 # time.sleep(0.1) 41 # char_num = i//2 #打印多少个# 42 # per_str = '%s%% : %s ' % (i, '*' * char_num) if i == 100 else ' %s%% : %s'%(i,'*'*char_num) 43 # print(per_str,end='', file=sys.stdout, flush=True) 44 45 # import sys 46 # for i in range(0, 101, 2): 47 # time.sleep(0.1) 48 # char_num = i // 2 49 # per_str = ' %s%% : %s' % (i, '*' * char_num) 50 # print(per_str, file=sys.stdout, flush=True) 51 52 # 4.input() 53 # 5.type() 54 # 6.hash 55 # print(hash('asdsffd'))#一开始几个都是不变的,,然后重新运行一次就变了 56 # print(hash('asdsffd')) 57 # print(hash('asdsffd')) 58 # print(hash('asdsffd')) 59 # print(hash('asdsffd')) 60 # print(hash((1,2,3,4))) 61 62 # 7.open 63 # r,w,a,r+,w+,a+(都可以加b) 64 # f=open('tmp','r+')#r+打开文件 65 # print(f.read(3))#如果读了在写,追加 66 # f.seek(5)#如果seek指定了光标的位置,就从该位置开始覆盖这写 67 # f.write('aaaaaa')#如果直接写,从头覆盖 68 # f.close() 69 70 71 # 8.__import__() 72 # import os 73 # import sys 74 # import time 75 76 # 9.callable:查看能不能调用 77 # print(callable(123))#数字不能调用结果就是False 78 # print(callable(open))#函数可以调用就返回True 79 80 # 10.dir 查看数据类型的方法 81 # print(dir(__builtins__))#看着报错,,但其实不报错 82 # print(dir(int)) 83 # print(dir(list)) 84 # print(dir(0))#和int一样 85 # print(set(dir(list))-set(dir(tuple))) 86 # 11. 87 # num1=int(123) 88 # num2=int(12.3)#强制转换成int类型 89 # print(num1,num2) 90 # 12.取商/余 91 # print(divmod(7,3)) 92 # 13.计算最小值 93 # print(min(1,2,3,4)) 94 # print(min([5,6])) 95 # 13.计算最大值 96 # print(max(1,2,3,4)) 97 # print(max([5,6])) 98 99 # 14.sum求和 100 # print(sum(1,2,3,4))#出错了,参数是序列,散列不行 101 # print(sum([5,6])) 102 # print(sum((1,2,3,4))) 103 104 # 以下的两个方式是一样的 105 # print(1+2) 106 # print(int(1).__add__(2)) 107 108 # 15.round精确度 109 # print(round(3.1415926,2))#保留两位 110 111 112 # 16.pow()幂运算 113 # print(pow(2,3)) 114 # print(2**3) 115 116 117 # 17.和数据结构相关的 118 # 1.reversed()顺序的反转 119 # l=[1,2,3,4] 120 # print(list(reversed(l)))#是生成了一个新的列表,没有改变原来的列表(以后能不用reversed就不用reversed,用reverse) 121 # 122 # # l.reverse()#在现在的列表的基础上修改了,修改的是原来的列表 123 # print(l) 124 125 # 2.slice切片 126 # 3.format()#除了格式化以外 127 # print(format('test','<20')) 128 # print(format('test','>40')) 129 # print(format('test','^40')) 130 131 # 4.bytes 132 s='你好' 133 # sb=bytes(s,encoding='utf-8') 134 # print(sb) 135 # print(sb.decode('utf-8')) 136 137 # sb2=bytearray(s,encoding='utf-8') 138 # sb2[0]=229 #修改 了解就好 139 # print(sb2.decode('utf-8')) 140 # print(sb2) 141 # print(sb2[0]) 142 143 # 5.repr 144 # print(repr('1234')) 145 # print(repr(1234)) 146 # print('name:%r'%('egon'))#你怎么传进去的就按什么格式打印出来了 147 148 # 6.set和frozenset(不可变的集合)就像list和tuple 149 150 # 7.enumerate 151 # l=['a','b'] 152 # for i in enumerate(l): 153 # print(i) 154 # 155 # for i ,j in enumerate(l): 156 # print(i,j) 157 158 # 8.all和any 159 # print(all([1,2,3])) 160 # print(all([0,2,3]))#因为0是False 161 # 162 # print(any([1,2,3])) 163 # print(any([0,2,3])) 164 165 # 9.zip() 166 # l=[1,2,3] 167 # l2=[4,5,6,7,8] 168 # print(zip(l,l2)) 169 # print(list(zip(l,l2))) 170 # l3={'k':'v'} 171 # print(list(zip(l,l3))) 172 173 # 10.sort和sorted 174 # l=[1,3,5,-2,-6] 175 # l.sort() 176 # print(l) 177 # l2=[1,3,5,-2,-6] 178 # print(sorted(l2)) 179 # print(sorted(l2,key=abs)) 180 # print(sorted(l2,key=abs,reverse=True))#默认从小到大排序,修改为True,则从大到小排序 181 182 183 # 11.map():我要对我的列表当中的每一个值去做函数里面的操作 184 # l=[1,2,3,4,5] 185 # def pow2(x): 186 # return x*x 187 # print(list(map(pow2,l))) 188 189 190 # 12.filter():从一个列表当中找到所有符合筛选条件的,在组成一个新列表 191 # def aaa(x): 192 # return x%2==1 193 # ret=list(filter(aaa,[1,2,54,3,6,8,17,9])) 194 # print(ret)
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

https://www.processon.com/ 具体分类见此网站

2、python---------------递归函数

一、递归的定义

1.什么是递归:在一个函数里在调用这个函数本身

2.最大递归层数做了一个限制:997,但是也可以自己限制

1 def  foo():
2     print(n)
3     n+=1
4     foo(n)
5 foo(1)
验证997

3.最大层数限制是python默认的,可以做修改,但是不建议你修改。(因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决问题,要么就是你的代码太烂了)

1 import sys
2 sys.setrecursionlimit(10000000)#修改递归层数
3 n=0
4 def f():
5     global n
6     n+=1
7     print(n)
8     f()
9 f()
View Code

我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。

sys模块:所有和python相关的设置和方法

4.结束递归的标志:return

5.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模

6.使用场景:数据的规模在减少,但是解决问题的思路没有改变

7.很多排序算法会用到递归

二、递归小应用

1.下面我们来猜一下小明的年龄

小明是新来的同学,丽丽问他多少岁了。

他说:我不告诉你,但是我比滔滔大两岁。

滔滔说:我也不告诉你,我比晓晓大两岁

晓晓说:我也不告诉你,我比小星大两岁

小星也没有告诉他说:我比小华大两岁

最后小华说,我告诉你,我今年18岁了

这个怎么办呢?当然,有人会说,这个很简单啊,知道小华的,就会知道小星的,知道小星的就会知道晓晓的,以此类推,就会知道小明的年龄啦。这个过程已经非常接近递归的思想了。

小华 18+2
小星 20+2
晓晓   22+2
滔滔   24+2
小明  26+2

上面的图我们可以用个序号来表示吧

age(5) = age(4)+2
age(4) = age(3) + 2 
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18

那么代码该怎么写呢?

1 def age(n):
2     if n == 1:
3         return 18
4     else:
5         return age(n - 1) + 2
6 
7 ret=age(6)
8 print(ret)
View Code

2.一个数,除2直到不能整除2

1 def  cal(num):
2         if  num%2==0:#先判断能不能整除
3             num=num//2
4             return cal(num)
5         else:
6             return num
7 print(cal(8))
一个数,除2直到不能整除2

3.如果一个数可以整除2,就整除,不能整除就*3+1

1 def func(num):
 2     print(num)
 3     if num==1:
 4         return
 5     if num%2==0:
 6         num=num//2
 7     else:
 8         num=num*3+1
 9     func(num)
10 func(5)
如果一个数可以整除2,就整除,不能整除就*3+1

三、三级菜单

menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
 1 def threeLM(menu):
 2     while True:
 3         for key in menu:#循环字典的key,打印出北京,上海,山东
 4             print(key)
 5         name=input('>>>:').strip()
 6         if name=='back' or name=='quit':#如果输入back,就返回上一层。如果输入quit就退出
 7             return name #返回的name的给了ret
 8         if name in menu:
 9             ret=threeLM(menu[name])
10             if ret=='quit':return 'quit'#如果返回的是quit,就直接return quit 了,就退出了
11 threeLM()
12 # print(threeLM(menu))#print打印了就返回出quit了,threeLM()没有打印就直接退出了
三级菜单

四、二分查找算法 

从这个列表中找到55的位置l = 【2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88】

 内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

这就是二分查找,从上面的列表中可以观察到,这个列表是从小到大依次递增的有序列表。

按照上面的图就可以实现查找了。

简单的二分法
升级版二分法

一、匿名函数:也叫lambda表达式

1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行

2.参数可以有多个,用逗号隔开

3.返回值和正常的函数一样可以是任意的数据类型

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

二、匿名函数练习

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 请把下面的函数转换成匿名函数
2 def  add(x,y)
3         return x+y
4 add()
5 
结果: 6 sum1=lambda x,y:x+y 7 print(sum1(5,8))
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 dic = {'k1':50,'k2':80,'k3':90}
2 # func= lambda k:dic[k]
3 # print(max(dic,key=func))
4 print(max(dic,key = lambda k:dic[k]))#上面两句就相当于下面一句
比两个数的大小
1 3.map方法
2 l=[1,2,3,4]
3 # def func(x):
4 #     return x*x
5 # print(list(map(func,l)))
6 
7 print(list(map(lambda x:x*x,l)))
map方法的应用
1 l=[15,24,31,14]
2 # def func(x):
3 #         return x>20
4 # print(list(filter(func,l)))
5 
6 print(list(filter(lambda x:x>20,l)))
filter函数的小应用
 1 # 方法一
 2 t1=(('a'),('b'))
 3 t2=(('c'),('d'))
 4 # print(list(zip(t1,t2)))
 5 print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))
 6 
 7 # 方法二
 8 print(list([{i,j} for i,j in zip(t1,t2)]))
 9 
10 #方法三
11 func = lambda t1,t2:[{i,j} for i,j in zip(t1,t2)]
12 ret = func(t1,t2)
13 print(ret)
5.现有两个元组(('a'),('b')),(('c'),('d')), 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

三、列表推导式

1 6.30以内所有被3整除的数
2 print(list([i for i in range(30) if i%3==0]))
30以内能被3整除的数

三、字典推倒式

例一:将一个字典的key和value对调

1 mcase = {'a': 10, 'b': 34}
2 res1 = {i:mcase[i] for i in mcase}
3 res={mcase[i]:i for i in mcase }
4 print(res1)
5 print(res)
View Code

例二:合并大小写对应的value值,将k统一成小写

1 mcase = {'a':10,'b':34,'A':7}
2 res = {i.lower():mcase.get(i.lower(),0)+mcase.get(i.upper(),0) for i in mcase}
3 print(res)
View Code

四、集合推倒式

例:计算列表中每个值的平方,自带去重功能

1 l=[5,-5,1,2,5]
2 print({i**2 for i in l})
View Code

一、递归的定义

1.什么是递归:在一个函数里在调用这个函数本身

2.最大递归层数做了一个限制:997,但是也可以自己限制

1 def  foo():
2     print(n)
3     n+=1
4     foo(n)
5 foo(1)
验证997

3.最大层数限制是python默认的,可以做修改,但是不建议你修改。(因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决问题,要么就是你的代码太烂了)

1 import sys
2 sys.setrecursionlimit(10000000)#修改递归层数
3 n=0
4 def f():
5     global n
6     n+=1
7     print(n)
8     f()
9 f()
View Code

我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。

sys模块:所有和python相关的设置和方法

4.结束递归的标志:return

5.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模

6.使用场景:数据的规模在减少,但是解决问题的思路没有改变

7.很多排序算法会用到递归

二、递归小应用

1.下面我们来猜一下小明的年龄

小明是新来的同学,丽丽问他多少岁了。

他说:我不告诉你,但是我比滔滔大两岁。

滔滔说:我也不告诉你,我比晓晓大两岁

晓晓说:我也不告诉你,我比小星大两岁

小星也没有告诉他说:我比小华大两岁

最后小华说,我告诉你,我今年18岁了

这个怎么办呢?当然,有人会说,这个很简单啊,知道小华的,就会知道小星的,知道小星的就会知道晓晓的,以此类推,就会知道小明的年龄啦。这个过程已经非常接近递归的思想了。

小华 18+2
小星 20+2
晓晓   22+2
滔滔   24+2
小明  26+2

上面的图我们可以用个序号来表示吧

age(5) = age(4)+2
age(4) = age(3) + 2 
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18

那么代码该怎么写呢?

1 def age(n):
2     if n == 1:
3         return 18
4     else:
5         return age(n - 1) + 2
6 
7 ret=age(6)
8 print(ret)
View Code

2.一个数,除2直到不能整除2

1 def  cal(num):
2         if  num%2==0:#先判断能不能整除
3             num=num//2
4             return cal(num)
5         else:
6             return num
7 print(cal(8))
一个数,除2直到不能整除2

3.如果一个数可以整除2,就整除,不能整除就*3+1

1 def func(num):
 2     print(num)
 3     if num==1:
 4         return
 5     if num%2==0:
 6         num=num//2
 7     else:
 8         num=num*3+1
 9     func(num)
10 func(5)
如果一个数可以整除2,就整除,不能整除就*3+1

三、三级菜单

menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
 1 def threeLM(menu):
 2     while True:
 3         for key in menu:#循环字典的key,打印出北京,上海,山东
 4             print(key)
 5         name=input('>>>:').strip()
 6         if name=='back' or name=='quit':#如果输入back,就返回上一层。如果输入quit就退出
 7             return name #返回的name的给了ret
 8         if name in menu:
 9             ret=threeLM(menu[name])
10             if ret=='quit':return 'quit'#如果返回的是quit,就直接return quit 了,就退出了
11 threeLM()
12 # print(threeLM(menu))#print打印了就返回出quit了,threeLM()没有打印就直接退出了
三级菜单

四、二分查找算法 

从这个列表中找到55的位置l = 【2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88】

 内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

这就是二分查找,从上面的列表中可以观察到,这个列表是从小到大依次递增的有序列表。

按照上面的图就可以实现查找了。

简单的二分法
升级版二分法

一、匿名函数:也叫lambda表达式

1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行

2.参数可以有多个,用逗号隔开

3.返回值和正常的函数一样可以是任意的数据类型

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

二、匿名函数练习

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 请把下面的函数转换成匿名函数
2 def  add(x,y)
3         return x+y
4 add()
5 
结果: 6 sum1=lambda x,y:x+y 7 print(sum1(5,8))
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 dic = {'k1':50,'k2':80,'k3':90}
2 # func= lambda k:dic[k]
3 # print(max(dic,key=func))
4 print(max(dic,key = lambda k:dic[k]))#上面两句就相当于下面一句
比两个数的大小
1 3.map方法
2 l=[1,2,3,4]
3 # def func(x):
4 #     return x*x
5 # print(list(map(func,l)))
6 
7 print(list(map(lambda x:x*x,l)))
map方法的应用
1 l=[15,24,31,14]
2 # def func(x):
3 #         return x>20
4 # print(list(filter(func,l)))
5 
6 print(list(filter(lambda x:x>20,l)))
filter函数的小应用
 1 # 方法一
 2 t1=(('a'),('b'))
 3 t2=(('c'),('d'))
 4 # print(list(zip(t1,t2)))
 5 print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))
 6 
 7 # 方法二
 8 print(list([{i,j} for i,j in zip(t1,t2)]))
 9 
10 #方法三
11 func = lambda t1,t2:[{i,j} for i,j in zip(t1,t2)]
12 ret = func(t1,t2)
13 print(ret)
5.现有两个元组(('a'),('b')),(('c'),('d')), 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

三、列表推导式

1 6.30以内所有被3整除的数
2 print(list([i for i in range(30) if i%3==0]))
30以内能被3整除的数

三、字典推倒式

例一:将一个字典的key和value对调

1 mcase = {'a': 10, 'b': 34}
2 res1 = {i:mcase[i] for i in mcase}
3 res={mcase[i]:i for i in mcase }
4 print(res1)
5 print(res)
View Code

例二:合并大小写对应的value值,将k统一成小写

1 mcase = {'a':10,'b':34,'A':7}
2 res = {i.lower():mcase.get(i.lower(),0)+mcase.get(i.upper(),0) for i in mcase}
3 print(res)
View Code

四、集合推倒式

例:计算列表中每个值的平方,自带去重功能

1 l=[5,-5,1,2,5]
2 print({i**2 for i in l})
View Code

一、匿名函数:也叫lambda表达式

1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行

2.参数可以有多个,用逗号隔开

3.返回值和正常的函数一样可以是任意的数据类型

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数

二、匿名函数练习

内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 请把下面的函数转换成匿名函数
2 def  add(x,y)
3         return x+y
4 add()
5 
结果: 6 sum1=lambda x,y:x+y 7 print(sum1(5,8))
内置函数、递归函数和匿名函数
1、python--------------内置函数
2、python---------------递归函数
3、python---------匿名函数
1 dic = {'k1':50,'k2':80,'k3':90}
2 # func= lambda k:dic[k]
3 # print(max(dic,key=func))
4 print(max(dic,key = lambda k:dic[k]))#上面两句就相当于下面一句
比两个数的大小
1 3.map方法
2 l=[1,2,3,4]
3 # def func(x):
4 #     return x*x
5 # print(list(map(func,l)))
6 
7 print(list(map(lambda x:x*x,l)))
map方法的应用
1 l=[15,24,31,14]
2 # def func(x):
3 #         return x>20
4 # print(list(filter(func,l)))
5 
6 print(list(filter(lambda x:x>20,l)))
filter函数的小应用
 1 # 方法一
 2 t1=(('a'),('b'))
 3 t2=(('c'),('d'))
 4 # print(list(zip(t1,t2)))
 5 print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))
 6 
 7 # 方法二
 8 print(list([{i,j} for i,j in zip(t1,t2)]))
 9 
10 #方法三
11 func = lambda t1,t2:[{i,j} for i,j in zip(t1,t2)]
12 ret = func(t1,t2)
13 print(ret)
5.现有两个元组(('a'),('b')),(('c'),('d')), 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

三、列表推导式

1 6.30以内所有被3整除的数
2 print(list([i for i in range(30) if i%3==0]))
30以内能被3整除的数

三、字典推倒式

例一:将一个字典的key和value对调

1 mcase = {'a': 10, 'b': 34}
2 res1 = {i:mcase[i] for i in mcase}
3 res={mcase[i]:i for i in mcase }
4 print(res1)
5 print(res)
View Code

例二:合并大小写对应的value值,将k统一成小写

1 mcase = {'a':10,'b':34,'A':7}
2 res = {i.lower():mcase.get(i.lower(),0)+mcase.get(i.upper(),0) for i in mcase}
3 print(res)
View Code

四、集合推倒式

例:计算列表中每个值的平方,自带去重功能

1 l=[5,-5,1,2,5]
2 print({i**2 for i in l})
View Code