zoukankan      html  css  js  c++  java
  • python记录_day14 内置函数二 迭代 二分法

    一、匿名函数

    形式:

    lambda 形参:返回值

    lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数。匿名函数不是说一定没名字,而是他们的名字统一称为“lambda”,可以用__name__查看

    注意:

    1. 函数的参数可以有多个. 多个参数之间用逗号隔开

    2. 匿名函数不管多复杂. 只能写一行, 且逻辑结束后直接返回数据

    3. 返回值和正常的函数一样, 可以是任意数据类型

    1 #计算n的n次方
    2 f = lambda n : n**n
    3 
    4 print(f(10))

    二、sorted

    排序函数,形式  sorted(iterable, key=None, reverse = False)  

    iterrable :要进行排序的可迭代对象

    key:相当于排序规则,在sorted内部会将可迭代对象的每一个元素传递给这个函数,根据函数的运算结果进行排序

    reverse: 升序还是降序,False是升序,True是降序

    1 lst = ["将夜","择天记","斗破苍穹","武动乾坤"]
    2 
    3 s = sorted(lst, key= lambda el : len(el), reverse = False) #按电视剧名的长度排序
    4 
    5 print(s)

    三、filter

    筛选函数,形式 filter(function , iterable ) 

    function:筛选规则,将iterable的每一个元素传递给这个函数,根据function返回的True或者False来判断是否保留此项数据

    llst = ["将夜","择天记","斗破苍穹","武动乾坤"]
    
    s = filter( lambda el : len(el)>3,lst) #按电视剧名的长度排序
    for el in s:
        print(el)
    
    结果:
    斗破苍穹
    武动乾坤

    四、map

    映射函数 形式 map(function , iterable)

    function:映射规则,分别取iterable中的每一个元素,传递给函数执行,得到新的数据

    1 #列表中每个元素的平方组成新列表
    2 lst = [2,4,6,8,10]
    3 num = map(lambda x:x*x,lst)
    4 
    5 for el in num :
    6     print(el)

    五、递归

    在函数中调用函数本身,就是递归(自己调用自己)

    递归的最大深度是1000,但是一般都取不到

    递归关键的是找到递归入口和递归出口

    应用:使用递归遍历文件夹系统(递归可以用来遍历各种树形结构)

     1 def func(path, ceng)
     2      lst = os.listdir(path) # 打开一个文件夹. 获取到文件夹内的所有内容 
     3      for el in lst: # 当前文件夹内的所有的文件名(包括文件夹名字)
     4          file_real_path = os.path.join(path, el)  # 拼接文件的真实路径
     5          # 判断这个路径是文件还是文件夹
     6          if os.path.isdir(file_real_path):
     7              # 递归的入口
     8              print("	"*ceng, el)
     9              func(file_real_path,ceng+1) # 重新执行刚才的操作
    10     
    11         else:   # 不是文件夹, 是文件
    12              # 递归的出口
    13             print("	"*ceng, el)
    14 
    15 func("D:/PyCharm/workspace/周作业",0)  #调用函数

    六、二分法

    二分查找:每次能够排除掉一半的数据,查找的效率非常高。 但是局限性比较大, 必须是有序序列才可以使用二分查找。

     1 #查找列表中是否存在n
     2 lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]
     3 
     4 #普通查找
     5 def func():
     6     n =input(">>")
     7     for el in lst:
     8         if el == int(n):
     9             return True
    10     else:
    11         return False
    12 
    13 # print(func())
    14 
    15 #判断列表中是否存在n
    16 #二分查找---非递归
    17 n = int(input(">>"))
    18 left = 0  #左边界
    19 right = len(lst)-1  #右边界
    20 while left<=right:       #左边界小于等于右边界进入循环
    21     mid = (left+right)//2  #取商的整数
    22     if n < lst[mid]:   #判断你的数字和中间数大小
    23         right = mid-1  #右边界往左移
    24     elif n >lst[mid]:
    25         left = mid+1     #左边界往右移
    26     else:
    27         print("找到了")
    28         break
    29 else:       # 左边界大于右边界退出循环
    30     print("找不到")
    31 #二分查找---递归
    32 def digui(n,left,right):
    33     if left <= right:
    34         mid  = (left +right)//2
    35         if n < lst[mid]:
    36             right = mid -1
    37         elif n > lst[mid]:
    38             left = mid +1
    39         else:
    40             print("找到了")
    41             return True
    42         #digui(n, left, right)
    43         return digui(n, left, right)   # 不写return,返回值始终为None
    44     else:
    45         return -1
    46 ret = digui(56,0,len(lst)-1)
    47 print(ret)
    48 
    49 #二分查找 ----递归(切列表)
    50 def binary_search(lst,n):
    51     left = 0
    52     right = len(lst)-1
    53     if left >right:
    54         print("找不到")
    55     mid = (left + right)//2
    56     if n < lst[mid]:
    57         #binary_search(lst[:mid], n)
    58         return binary_search(lst[:mid],n)  # 不写return,返回值会始终为None
    59     elif n > lst[mid]:
    60         #binary_search(lst[mid + 1:], n)
    61         return binary_search(lst[mid+1: ],n)
    62     else:
    63         print("找到了")
    64         return True
    65 ret = binary_search(lst,56)
    66 print(ret)
    示例
  • 相关阅读:
    (七)android开发中两种方式监听短信的原理和实现
    (三)android中Toast的使用
    (二)、Android ListView滑动过程中图片显示重复错位闪烁问题解决
    (一)PagerAdapter、FragmentPagerAdapter、FragmentStatePagerAdapter的区别
    (六)Android中使用CountDownTimer实现倒计时功能
    (五)在android 4.4上设置手机状态栏的背景
    (四)使用PagerSlidingTabStrip和ViewPager实现可左右滑动和点击效果功能
    devexpress表格gridcontrol实现列统计,总计,平均,求和等。
    常用GDB命令行调试命令
    新浪微博SSO授权后回调客户端没有执行sinaweiboDidLogIn&无法返回应用
  • 原文地址:https://www.cnblogs.com/zhang-yl/p/9911049.html
Copyright © 2011-2022 走看看