内置函数二

一 . lambda匿名函数

  lambda表示的是匿名函数.不需要用def来声明

  语法 : 

    函数名 = lambda 参数 : 返回值

  注意:

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

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

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

  匿名函数并不是说一定没有名字. 这里前面的变量就是一个函数名. 说他是匿名原因是我们通过__name__查看的时候是没有名字的. 统一都叫lambda. 在调用的时候没有什么特别之处. 像正常的函数调用即可

二 . sorted()

  排序函数

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

    iterable : 排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素chua传递给这个函数的参数,根据函数运算的结果进行排序

    reverse : 是否是倒序.Ture : 倒序 , False : 正序

lst = [1,5,3,4,6]
lst2 = sorted(lst)
print(lst)             # 原列表不会改变
print(lst2)           # 返回的新列表是经过排序的

dic = {1:"A",3:"C",2:"B"}
print(sorted(dic))       # 如果是字典,则返回排序过后的key

  和函数 , lambda组合使用

# 根据字符串长度进行排序
lst = ["麻花藤","冈本次郎","中央情报局","狐仙"]

# 用函数计算字符串长度
def func(s):
    return len(s)

print(sorted(lst,key = func))

#用lambda计算字符串长度
print(sorted(lst , key = lambda s: len(s)))

三 . filter()

  筛选函数

  语法 : filter(function , iterable)

    function : 用来筛选的函数,在filter中会自动的把iterabler中的元素传递给functian,然后根据function返回的Ture或False来判断是否保留此项数据

    iterable : 可迭代对象

lst = [1,2,3,4,5,6,7]
ll = filter(lambda x: x%2 == 0,lst)      # 筛选所有的偶数

print(ll)
print(list(ll))

四 . map()

  映射函数

  语法 : map(function , iterable) 可以读可迭代对象中的每一个元素进行映射,分别取执行function

def func():
    return e*e

mp = map(func,[1,2,3,4,5])
print(mp)
print(lst(mp))


print(list(map(lambda x : x*x , [1,2,3,4,5])))

  计算两个列表中相同位置的数据和

lst1 = [1,2,3,4,5]
lst2 = [2,4,6,8,10]

print(list(map(lambda x , y: x+y , lst1 ,lst2)))

五 . 递归

  在函数中调用函数本身,就是递归

def func():
    print("你好")
    func()
func()

  在python中递归的深度最大到1000

  递归的应用 :

    我们可以使用递归来遍历各种树状型结构,比如 : 文件夹中所有的文件

import os

def func(filepath , n):
    files = os.listdir(filepath)    # 获取到当前文件夹中的所有的文件
    for file in files:      #遍历文件夹中的文件,如果获取到的只是本层文件名
        file_d = os.path.join(filepath,file) #加入文件夹,获取到文件夹+文件
        if os.path.isdir(file_d)   # 如果该路径下的文件时文件夹
            print("	"*n , file)
            read(file_d , n+1)      #继续进行相同的操作
        else:
            print("	"*n , file)    # 递归出口 ,最终在这里隐含着return

# 递归遍历目录下所有文件
func("d/xuexi/, 0)

六 . 二分法查找

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

  要求 : 查找的序列必须是有序序列

lst = [22,33,44,55,66,77,88,99,101,238,345,456,567,678,789]
n = 88
left = 0
right =len(lst) - 1
count = 1
while left <= right:
    mid = (left +right)//2
    if n < lst[mid]:
        right = mid - 1
    elif n > lst[mid]:
        left = mid + 1
    else:
        print(count)
        print(mid)
        break
    count += 1
else:
    print("不存在")

# 普通递归二分法
def func(n , left , right):
    if left <= right:
    mid = (left + right) // 2
        if n < lst[mid]:
            right = mid - 1
        elif n > lst[mid]:
            left = mid + 1
        else:
            return mid
        return func(n left ,right)   # 这个return必须要加,否则接受到的永远是None

    else:
        return -1

print(func(88 , 0 , len(lst) - 1))


#另类二分法,很难计算位置
def func(lst , n):
    
    left = 0
    right = len(lst) - 1
    if left > right:
        print("不在这里")
    mid = (left + right) // 2    
    if n < lst[mid]:        
        return func(ls[:mid], n)    
    elif n > lst[mid]:        
        return func(ls[mid+1:], n)    
    else:        
        print("在这里") 
func(lst, 567)
原文地址:https://www.cnblogs.com/xiangweilai/p/9482081.html