【主要内容】
1. lambda 匿名函数
语法:
lambda 参数:返回值
不能完成复杂的操作
2. sorted() 函数
排序.
1. 可迭代对象
2. key=函数. 排序规则
3. reverse. 是否倒序
3. filter() 函数
过滤
1. 函数, 返回True或False
2. 可迭代对象
4. map() 映射函数
1. 函数
2. 可迭代对象
5. 递归
自己调用自己.
def func():
func()
func()
难点:不好想.需要找规律. 不好读
6. 二分法
掐头结尾取中间. 不停的改变左和右. 间接改变中间. 查询效率非常高
【代码】
1、匿名函数
1 def func(n): 2 return n * n 3 4 print(func(3)) 5 a = func 6 a(3) 7 print(a.__name__) # 查看函数的函数名 8 # lambda 匿名函数 9 # x 参数 10 # : 后面是函数体(直接return的内容) 11 a = lambda x: x*x # 一行搞定一个函数. 但是, 不能完成复杂的函数操作 12 print(a) 13 print(a(6)) 14 print(a.__name__) 15 16 b = lambda x, y: x+y 17 print(b(1,3)) 18 print(b.__name__) 19 20 # 语法: 变量 = lambda 参数: 返回值
2、sorted
1 # lst = [5,7,6,12,1,13,9,18,5] 2 # # lst.sort() # sort是list里面的一个方法 3 # # print(lst) 4 # 5 # ll = sorted(lst, reverse=True) # 内置函数. 返回给你一个新列表 新列表是被排序的 6 # print(ll) 7 8 9 # 给列表排序. 根据字符串的长度进行排序 10 lst = ["大阳哥a", "尼古拉斯aa", "赵四aaa", "刘能a", "广坤aaaaaa", "谢大脚a"] 11 # 12 # def func(s): 13 # return s.count('a') # 返回数字 14 # 15 # ll = sorted(lst, key=lambda s:s.count('a')) # 内部. 把可迭代对象中的每一个元素传递给func 16 # print(ll) 17 # 18 # lst = [ 19 # {'id':1, 'name':'alex', 'age':18}, 20 # {'id':2, 'name':'taibai', 'age':58}, 21 # {'id':3, 'name':'wusir', 'age':38}, 22 # {'id':4, 'name':'ritian', 'age':48}, 23 # {'id':5, 'name':'女神', 'age':18} 24 # ] 25 # 26 # ll = sorted(lst, key=lambda dic:dic['age'], reverse=True) 27 # print(ll)
3、filter帅选函数
1 # def func(i): # 判断奇数 2 # return i % 2 == 1 3 lst = [1,2,3,4,5,6,7,8,9] 4 5 ll = filter(lambda i:i%2==1, lst) 6 # 第一个参数. 函数. 将第二个参数中的每一个元素传给函数. 函数如果返回True, 留下该元素. 7 # print("__iter__" in dir(ll)) 8 # print("__next__" in dir(ll)) 9 # print(list(ll)) 10 11 # lst = [ 12 # {'id':1, 'name':'alex', 'age':18}, 13 # {'id':2, 'name':'taibai', 'age':58}, 14 # {'id':3, 'name':'wusir', 'age':38}, 15 # {'id':4, 'name':'ritian', 'age':48}, 16 # {'id':5, 'name':'女神', 'age':18} 17 # ] 18 # 19 # print(list(filter(lambda dic: dic['age']>40, lst)))
3、map函数
1 # lst = [1,2,3,4,5,6,7,8,9,0,23,23,4,52,35,234,234,234,234,234,23,4] 2 # it = map(lambda i: i * i, lst) # 把可迭代对象中的每一个元素传递给前面的函数进行处理. 处理的结果会返回成迭代器 3 # print(list(it)) 4 5 6 # lst1 = [ 1, 2, 3, 4, 5] 7 # lst2 = [ 2, 4, 6, 8] 8 # print(list(map(lambda x, y:x+y, lst1, lst2))) # 如果函数中有多个参数. 后面对应的列表要一一对应
4、递归
1 # import sys 2 # sys.setrecursionlimit(10000) # 可以调整递归深度. 但是不一定能跑到这里 3 # def func(count): 4 # print("我是谁,我在哪里"+str(count)) 5 # func(count+1) 6 # func(1) 7 8 # while 1: 9 # a = 10 10 # print("哈哈") 11 12 # 遍历树形结构 13 # import os 14 # filePath = "d:sylarpython_workspace" 15 # 16 # def read(filePath, n): 17 # it = os.listdir(filePath) # 打开文件夹 18 # for el in it: 19 # # 拿到路径 20 # fp = os.path.join(filePath, el) # 获取到绝对路径 21 # if os.path.isdir(fp): # 判断是否是文件夹 22 # print(" "*n,el) 23 # read(fp, n+1) # 又是文件夹. 继续读取内部的内容 递归入口 24 # else: 25 # print(" "*n,el) # 递归出口 26 # 27 # read(filePath, 0)
5、二分法查找
1 # lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111] 2 # n = 567 3 # left = 0 4 # right = len(lst) - 1 5 # count = 1 6 # while left <= right: 7 # middle = (left + right) // 2 8 # if n > lst[middle]: 9 # left = middle + 1 10 # elif n < lst[middle]: 11 # right = middle - 1 12 # else: 13 # print(count) 14 # print("存在") 15 # print(middle) 16 # break 17 # count = count + 1 18 # else: 19 # print("不存在") 20 lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111] 21 22 def binary_search(left, right, n): 23 middle = (left + right)//2 24 if left > right: 25 return -1 26 if n > lst[middle]: 27 left = middle + 1 28 elif n < lst[middle]: 29 right = middle - 1 30 else: 31 return middle 32 return binary_search(left, right, n) 33 print(binary_search(0, len(lst)-1, 65) ) 34 35 36 def binary_search(lst, n): 37 left = 0 38 right = len(lst) - 1 39 middle = (left + right) // 2 40 if right <= 0: 41 print("没找到") 42 return 43 if n > lst[middle]: 44 lst = lst[middle+1:] 45 elif n < lst[middle]: 46 lst = lst[:middle] 47 else: 48 print("找到了") 49 return 50 binary_search(lst, n) 51 binary_search(lst, 65)