lambda匿名函式sorted排序函式filter過濾函式map對映函式

Bound_w發表於2018-08-15

lambda函式:表示匿名函式,不需要def來宣告,一句話就能搞定。

語法:函式名=lamda 引數:返回值

求10的10次方
f=lambda n:n**n
print(f(10))

注意:

函式名可以是多個,用逗號隔開

匿名函式只能寫一行,當邏輯結束之後就直接返回資料。

返回值和正常函式一樣,可以是任意資料

返回較大的那個數
user=lambda x,y:max(x,y)
print(user(2,1))


多個數字,返回最大值
user = lambda *args:max(args)

sorted()函式:排序函式

語法:sorte(lterable,key =none ,reverse=False)

lterable:可迭代物件

key:sorted函式內部會把可迭代物件中的每一個元素拿出來交給後面的key
 後面的key計算出一個數字. 作為當前這個元素的權重, 整個函式根據權重進行排序

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

lst = [
    {'name':"汪峰","age":48},
    {"name":"章子怡",'age':38},
    {"name":"alex","age":39},
    {"name":"wusir","age":32},
    {"name":"趙一寧","age":28}
    ]
li=sorted(lst,key=lambda el :len(el["name "]),reverse=True)
print(li)

filter()篩選函式

語法:filter(function,lterable)

function:用來篩選函式,在filter中,把iterable中的元素傳遞給function,然後根據function返回的  True或者False來判斷是否保留此項資料

iterable:可迭代對物件


lst = ["張無忌", "張鐵林", "趙一寧", "石可心","馬大帥"]
f = filter(lambda el:el[0]!="張",lst)
print('_iter_'in dir(f))
for el in f :
print(el)
篩選掉姓張的人
lst = [
    {"name":"汪峰", "score":48},
    {"name":"章子怡", "score":39},
    {"name":"趙一寧","score":97},
    {"name":"石可心","score":90}
]
f = filter(lambda el:el["score"] <60,lst)
print(list(f ) )


篩選掉60分以下的人

map()

對映函式

語法:map(function,iterable)對可迭代物件的每一個元素進行對映,分別取執行function

print(list(map(lambda x:x*x,[1,2,3,4])))
利用對映函式來求x的x 次冪
算兩個相同位置的列表的和
lst=[1,2,3,4,5]
lst1=[2,4,6,8,10]
print(list(map(lambda x, y: x+y,lst,lst1)))

遞迴

在函式中呼叫函式本身,就是遞迴,相當於貪吃蛇

在python中,遞迴最深是1000

我們可以利用遞迴來遍歷各種樹形結構


遍歷一個資料夾

import
os#引入模組 def func(wjm): wj=os.listdir(wjm)#開啟要開啟的資料夾 for el in wj :#拿到這個資料夾的每一個檔案 n_f=os.path.join(wjm,el )#獲取到路徑 if os.path .isdir(n_f):#判斷是否是資料夾 print(el)#是資料夾列印問價名 func(n_f) else: print(el )#不是檔案,普通檔案 func("f:/上課作業視訊")

二分法查詢

核心:去頭去尾取中間

條件:必須是有序的

lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]

n=888
zb=0
yb=len(lst)-1
while zb<=yb:
    zj=(zb+yb)//2
    if lst[zj]>n:
        yb=zj-1
    if lst[zj]<n:
        zb=zj +1
    if lst[zj]==n:
        print("找到了")
        break
else:
    print("沒找到")
用遞迴來完成二分法
def func(n,zb,yb):
    if zb<=yb:
        zj=(zb+yb)//2
        if lst[zj]>n:
            yb=n-1
            return (n,zb,yb)
        if lst[zj]<n:
            zb=zb+1
            return (n,zb,yb)
        elif n==lst[zj]:
            print("找到了")
            return zj
    else:
        print("沒有這個數")
ret=func(99,0,len(lst)-1)
print(ret)

 

相關文章