博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

内置函数--重点

Posted on 2018-12-29 21:55  GraceNana  阅读(123)  评论(0编辑  收藏  举报

lambda匿名函数

语法 : 函数名 = lambda 参数 : 返回值

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

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

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

sorted() 排序函数

语法 : sorted( Iterable , key = None , reverse = False )

  Iterable : 可迭代对象

  key : 排序规则(排序函数) , 在sorted内部会将可迭代对象中的内一个元素传递给这个函数的参数.根据函数运算的结果进行排序  可以和lambda组合使用 : sorted(lst , key = lambda s : len(s))

  reverse : 是否倒序 True : 倒序 False : 正序

filter() 筛选函数

 语法: filter(function. Iterable) 

function : 用来筛选的函数.根据返回True or False判断是否保留此项数据

Iterable : 可迭代对象

map() 映射函数

语法: map(function , iterable)   对每个元素执行function返回新列表

递归 

在函数中调用函数本身,就是递归(python中递归的深度最大到998)

递归的应用 (遍历树形结构如文件夹系统):

import os

def read(filepath , n):
    files = os.listdir(filepath)    #获取到当前文件夹中的所有文件
    for i in files :                     #遍历文件夹,获取所有文件名
        i_dir = os.path.join(filepath, i)
        if os.path.isdir(i_dir):     #如果该路径下是文件夹     
            print('\t'*n, i)
            read(i_dir, n+1)
        else:
            print('\t'*, i)              #递归出口,隐含return    

二分法查找

查找的序列必须是有序序列, 每次能够排除掉一般数据,查找效率高

方法一 :

 1 lst = [1, 2 ,5 ,34 ,56 ,89 ,120]
 2 n = int(input('请输入一个数: '))
 3 left = 0
 4 right = len(lst) - 1
 5 while left <= right:
 6     mid = (left + right)//2
 7     if n > lst[mid]:
 8         left = mid + 1
 9     elif n < lst[mid]:
10         right = mid - 1
11     else:
12         print('数字存在')
13         break
14 else:
15     print('数字不存在')

方法二 :

def func(n, lst, left, right):
    if left <= right:
        mid = (left + right) // 2
        if n > lst[mid]:
            left = mid + 1
            return func(n, lst, left, right)
        elif n < lst[mid]:
            right = mid - 1
            return func(n, lst, left, right)
        else:
            print('找到了')
            return mid
    else:
        print('找不到')
        return -1

n = int(input('请输入一个数: '))
lst = [1, 3, 5, 24, 45, 56, 109]
ret = func(n, lst, 0, len(lst)-1)
print(ret)