内置函数二
Posted xiangweilai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内置函数二相关的知识,希望对你有一定的参考价值。
一 . 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)