一.今日主要内容
# 1.lambda 匿名函数 语法: lambda 参数:返回值, 用于简单的操作
# a=lambda i:i*i
# print(a(4))
# print(a.__name__)
# b=lambda x,y: x*y
# print(b(23,3))
#
# 2.sorted函数
# lst=[1,32,12,11,43,2,56,78]
# lst.sort()
# print(lst)
# ll=sorted(lst,reverse=True)
# print(ll)
#
#
# 给列表根据字符串的长度进行排列
# lst = ["大阳哥aaaa", "尼古拉斯aa", "赵四aaaaaaaaa", "刘能a", "广坤aaa", "谢大脚aaaaaaa"]
# ll=sorted(lst,key=lambda i:len(i))
# print(ll)
#
# 根据列表中a的个数进行排列
# ll=sorted(lst,key=lambda i:i.count('a')) #内部可以把每一个可跌代对象元素传递给func函数
# print(ll)
#
# 根据列表中字典中的数据进行排列
# lst = [
# {'id':1, 'name':'alex', 'age':18},
# {'id':2, 'name':'taibai', 'age':58},
# {'id':3, 'name':'wusir', 'age':38},
# {'id':4, 'name':'ritian', 'age':48},
# {'id':5, 'name':'女神', 'age':18}
# ]
# ll=sorted(lst,key=lambda dic:dic['age'],reverse=True)
# print(ll)
#
# filter 过滤函数 语法: 函数(判断TRue或False) ,可跌代对象
# lst = [1,2,3,4,5,6,7,8,9]
# ll=filter(lambda i:i%2==1,lst) #返回的是一个迭代器
# 第一个参数是函数,将第二个参数中的每一个元素传给函数,如果是True留下元素
# print('__iter__' in dir(ll))
# # print('__next__' in dir(ll))
# print(list(ll))
#
# 过滤掉列表中字典年龄大于40的元素
# lst = [
# {'id':1, 'name':'alex', 'age':18},
# {'id':2, 'name':'taibai', 'age':58},
# {'id':3, 'name':'wusir', 'age':38},
# {'id':4, 'name':'ritian', 'age':48},
# {'id':5, 'name':'女神', 'age':18}
# ]
# ll=filter(lambda dic :dic['age']>40,lst)
# print(list(ll))
#
#
# map函数
# 语法: map(函数,可迭代对象) 把可迭代对象中的每一个元素放入函数中进行处理,处理后生成迭代器
# lst = [1,2,3,4,5,6,7,8,9,0,23,23,4,52,35,234,234,234,234,234,23,4]
# ll=map(lambda i:i*i,lst)
# print(list(ll))
#
# lst1 = [ 1, 2, 3, 4, 5]
# lst2 = [ 2, 4, 6, 8]
# print(list(map(lambda x,y:x+y,lst1,lst2)))
# 进行求和以列表中元素最短的为基准
#
#
# 递归(函数自己调用自己)
# 应用 遍历树形结构
# import os
# filepath='e:\Windows\study\python学习.idea'
# def read(filepath,n):
# it=os.listdir(filepath) #打开文件夹
# for el in it: #拿到路径
# fp=os.path.join(filepath,el) #获取绝对路径
# if os.path.isdir(fp): #判断是否问文件夹
# print('\t'*n,el) #子目录进行缩进
# read(fp,n+1) #如果是文件夹继续用read判断打开 递归的入口
# else:
# print('\t'*n,el) #递归出口
# read(filepath,0)
#
#
# 二分法查找三种方法
# 1.不用递归,用循环
# lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
# def func(n):
# left=0
# rigt=len(lst)-1
# count=0
# while left<=rigt:
# midlle=(left+rigt)//2
# if n>lst[midlle]:
# left=midlle+1
# elif n<lst[midlle]:
# rigt=midlle-1
# else:
# print('一共进行了%s次比较' % count)
# print('数字所在位置%s' % midlle)
# break
# count+=1
# else:
# print('不存在')
# func(566)
#
# 二分法查找,递归
# lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
# def func(left,right,n): #不改变列表本身, 动态改变左右,和中间值
# midlle=(left+right)//2
# if left>right:
# return '不存在此数'
# if n>lst[midlle]:
# left=midlle+1
# elif n<lst[midlle]:
# right=midlle-1
# else:
# return '存在此数,位置是%s' % midlle #如果不return会返回None
# return func(left,right,n)
# print(func(0,len(lst)-1,566))
#
# 二分法查找,递归--去除列表
# lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
# def func(lst,n):
# left=0
# right=len(lst)-1
# midlle=(left+right)//2
# if right<=0:
# print('没有这个数')
# return
# if n>lst[midlle]:
# lst=lst[midlle+1:]
# elif n<lst[midlle]:
# lst=lst[:midlle]
# else:
# print('找到了')
# return
# func(lst,n)
# func(lst,22)