zoukankan      html  css  js  c++  java
  • python学习Day15--递归与二分查找

    【主要内容】

    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)
    
    
  • 相关阅读:
    范围截取 字符串内容
    post请求 application/x‐www‐form‐urlencoded
    未能加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
    获取Url链接后的问号传值中的参数
    Post 提交跳转页面 Jquery请求
    C# POST application/x-www-form-urlencoded 请求
    《exception》第九次团队作业:Beta冲刺与验收准备(大结局)
    《Exception》第八次团队作业:Alpha冲刺
    《Exception团队》第七次作业:团队项目设计完善&编码
    《Exceptioning团队》第六次作业:团队项目系统设计改进与详细设计
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12290871.html
Copyright © 2011-2022 走看看