函数3-生成器表达式,推导式,递归,其他重要函数

生成器,生成器函数,推导式

特点:
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)
  1. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值