生成器,生成器函数,推导式
特点:
1.惰性
2.只能往下走
3.省内存
获取生成器:
生成器函数、生成器表达式、通过数据转化
生成器函数:
函数内部有yield
这个时候执行函数是获得生成器
next()出发生成器执行,执行到下一个yield
send(),可以给上一个yield传值,执行到下一个yield,不能用在开头与结尾
推导式
1.列表推导式 [结果 for 判断]
2.字典推导式
3.集合推导式 : 去重复
生成器表达式
(结果 for 判断) “元组”
函数:
1.匿名函数lambda
lambda 参数:函数reture值
2.sorted()排序函数
语法 sorted(iterable, key=None, reverse=False)
lst = ['a',"aa",'aaa','bb','bbbbb','aaaaaaaaaa']
def func():
return len(s)
ll = sorted(lst,key=func) #key 是排序方案,sorted函数内部回答可迭代对象按照每一个元素拿出来交给后面的key
print(ll) # 后面的可以计算出一个数字,当作当前元素的权重,整个函数根据权重进行排序
例子:(与lambda连用)
lst = [{'name':'a','age':48},{'name':'bbb','age':43},{'name':'cccc','age':40},{'name':'d','age':58}]
def func(el):
return el['age']
sorted(lst,key=func)
or
sorted(lst,key=lambda el: el['age'])
3.filter()
语法 filter(function(只是函数名,iterable))
#将可迭代对象传给函数function,所有返回true的都会保留,所有返回false的都会被过滤
lst = ['张无忌','黄晓明','贾静雯','张三丰','张正直']
def func(el):
if el[0] == "张":
return False
else:
return True
ll = filter(func, lst)
print(ll)
for i in ll:
print(i)
与lambda连用
filter(lambda el: el[0]!=‘张’,lst)
print(ll)
for i in ll:
print(i)
- map()映射函数
语法 map(function,iterable)
#分而治之
map(function1,map(function2,map(function3,lst)))
函数有多个参数,要一个一个列出来
lst1 = [1,2,5,6,8]
lst2 = [4,8,4,9,8]
map(lambda x,y:x+y,lst1,lst2) #水桶效应
5.递归
递归函数:自己调用自己
def func():
print('aa')
func()
func()
递归深度:自己调用自己的次数,默认1000次
二分法(必须有顺序从小到大)
掐头去尾取号中间
循环实现:
lst = [1, 11, 14, 15, 22, 44, 55, 151, 513, 515, 884]
n = 22
right = len(lst) - 1
lift = 0
while lift <= right:
mid = (right + lift) // 2
print('hhh')
if n >= lst[mid]:
lift = mid + 1
elif n <= lst[mid]:
right = mid - 1
else:
print("找到了")
break
else:
print('没找到')
递归实现:
def func(n, lift, right):
if lift <= right:
mid = (right + lift) // 2
if lst[mid] > n:
right = mid - 1
return func(n, lift, right)
elif lst[mid] < n:
lift = mid + 1
return func(n, lift, right)
elif lst[mid] == n:
print('找到了')
return mid
else:
return -1