1. 程式人生 > 實用技巧 >內建函式1--lambda匿名函式、sorted()排序函式、filter()篩選函式、map()對映函式

內建函式1--lambda匿名函式、sorted()排序函式、filter()篩選函式、map()對映函式

一.lambda匿名函式

  為了解決一些簡單的需求而設計的一句話函式

#計算j的j次方
def func(j):
    return j**j
print(func(3))
#lambda語法:函式名 = lambda 引數:返回值
f = lambda j:j**j
print(f(3))
print(f.__name__)#查詢函式名

lambda表示匿名函式,是內建函式,不需要def來宣告,一句話就能宣告出一個函式

語法

函式名 = lambda 引數:返回值

注意:

1.函式的引數可以有多個,多個引數之間用逗號隔開

g = lambda a,b:a+b
print(g(2,5))

2.匿名函式無論多複雜,只能寫一行,且邏輯結束後直接返回資料

3.返回值和正常的函式一樣,可以是任意資料型別

匿名函式並不是說一定沒有名字,前面的變數就是一個函式名.說它是匿名函式是因為通過__name__檢視的時候是沒有名字的,統一都叫lambda,在呼叫時沒有什麼特別之處,像正常函式呼叫即可

二.sorted()排序函式

語法:sorted(lterable,key = None, reverse = False)

  lterable:可迭代物件

  key:排序規則(排序函式),在sorted內部會將可迭代物件中的每一個元素傳遞給這個函式的引數.根據函式運算的結果進行排序

  reverse:是否是倒敘.True:倒敘,False:正序(預設為正序)

lst = [2,7,9,10,12,6]
lst2 = sorted(lst)#正序排序
print(lst)
print(lst2)
#lst2得到的結果為[2,6,7,9,10,12]

  和函式組合使用

#根據字串長度排序
lst = ["西瓜","西紅柿","超級土豆","apple",""]
#計算字串長度
def a(n):
    return len(n)
print(sorted(lst,key=a))
print(sorted(lst,key=lambda s:len(s)))#使用匿名函式,效果一樣
#結果均為['飯', '西瓜', '西紅柿', '超級土豆', 'apple']

  和lambda組合使用

#lambda組合使用
#根據字串長度排序
lst = ["西瓜","西紅柿","超級土豆","apple",""]
print(sorted(lst,key=lambda s:len(s)))
lst1 = [{"id":1,"name":"孫大聖","age":10000},{"id":2,"name":"八戒","age":500},{"id":3,"name":"師傅","age":18}]
#按照年齡進行排序(升序)
print(sorted(lst1,key=lambda n:n["age"]))

三.filter()篩選函式

語法:filter(function,lterable)

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

  Iterable:可迭代物件

lst = [1,3,2,5,7,9,10,12,14,13,2]
def a(n):
    if n%2==0:
        return n
    pass
lst1 = filter(a,lst)#篩選偶數
print(list(lst1))
#輸出結果為[2, 10, 12, 14, 2]
lst1 = [{"id":1,"name":"孫大聖","age":10000},{"id":2,"name":"八戒","age":500},{"id":3,"name":"師傅","age":18}]
#按照年齡進行排序
f = filter(lambda n:n["age"]>400,lst1)#篩選出年齡大於400的
print(list(f))

四.map()對映函式

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

計算列表中每個元素的平方,返回新列表

def func(n):
    return n**n
mp = map(func,[1,2,3,4,5,6])
print(mp)
print(list(mp))
#改寫成lambda
mp = map(lambda n:n**n,[1,2,3,4,5,6])
print(mp)
print(list(mp))

計算兩個列表中相同位置的資料和

#計算兩個列表相同位置的資料的和
lst1 = [1,2,3,4,5]
lst2 = [2,3,4,5,6]
print(list(map(lambda x=0,y=0:x+y,lst1,lst2)))