• 内置函数2 递归


    lambda 匿名函数

      语法 lambda 参数;返回值

    a = lambda n : n * n 
    print(a)
     
    #n = 2
    #4
    s = lambda x,y:x,y
    print(s) 
    #这个会报错,默认认为  x,y:x  是一对元组,y  没有传值,会报错
    
    s = lambda x,y:(x,y)
    print(s) 
    #用括号括起来说明这是一个整体,就ok

    sorted()  排序函数

      内置函数中提供了一个通用的排序方案

      

    lst = ["聊斋", "西游记", "三国演义", "葫芦娃", "水浒传", "年轮", "亮剑"]
    def func():
        ruturn len(lst) % 2
    li = sorted(lst,key = func)
    print(li)
    # 聊斋 三国演义 年轮 亮剑 西游记 葫芦娃 水浒传
    lst = [
        {'name':"汪峰","age":48},
        {"name":"章子怡",'age':38},
        {"name":"alex","age":39},
        {"name":"wusir","age":32},
        {"name":"赵一宁","age":28}
        ]
    li = dorted(lst,key = lambda el : len(el['name']))
    print(li)
    #{'name': 'wusir', 'age': 32}, {'name': 'alex', 'age': 39},
    # {'name': '章子怡', 'age': 38},
    # {'name': '赵一宁', 'age': 28}, {'name': '汪峰', 'age': 48}]

    filter()   筛选函数

      

    lst = [
        {"name":"汪峰", "score":48},
        {"name":"章子怡", "score":39},
        {"name":"赵一宁","score":97},
        {"name":"石可心","score":90}
    ]
    f = filter(lambda el : el['score'] < 60,lst)
    print(list(f))

    map

      一句话,分而治之

    map (func1,map(func2,map(func3,map)))

    递归

      递归函数有最大的深度是 1000,实际到 998 左右就会报错

      可以调整最大的深度,import sys        但是不建议这样做

    二分法

      一句话 掐头去尾取中间

      二分法使用场景   有序序列

      

    lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 ]
    n - 66
    left = 0
    right = len(lst) - 1     #获取索引 索引从0 开始
    while left <= right:    #边界,当右边的比左边还小的适合退出循环
        mid = (left + right)//2     #必须整除,索引没有小数
        if lst[mid] > n:
            right = mid - 1
        if lst[mid] < n:
            left = mid + 1
        if lst[mid] == n:
            print('找到了')
    else:
        print('没有这个数')

    递归来完成二分法

    lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]
    def func(n,left,right):
        if left <= right:
            print('哈哈')
            mid = (left + right)// 2
            if n > lst[mid]:
                left = mid + 1
                return func(n,left,right)
            if n <lst[mid]:
                right = right + 1
                return func(n,left,right)
            if n ==lst[mid]:
                print('找到了')
                return mid
        else:
            prinit('没有这个数')
            return -1
    
    ret = func(66,0,len(lst) - 1)
    print(ret)

      

  • 相关阅读:
    二纬码标签打印
    写JQuery 插件
    Java中System.getProperty()的参数
    (Java实现) 车站
    (Java实现) 活动选择
    (Java实现) 活动选择
    (Java实现) 过河卒
    (Java实现) 过河卒
    (Java实现) N皇后问题
    (Java实现) N皇后问题
  • 原文地址:https://www.cnblogs.com/lzqrkn/p/9482310.html
Copyright © 2020-2023  润新知