您好,登錄后才能下訂單哦!
這篇文章給大家介紹Python知識點的lambda和map及filter是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
通過示例介紹Python中的lambda,map,filter 函數的使用方法。
lambda 操作符(或 lambda函數)通常用來創建小巧的,一次性的匿名函數對象。它的基本語法如下:
lambda arguments : expression
lambda操作符可以有任意數量的參數,但是它只能有一個表達式,且不能包含任何語句,返回一個可以賦值給任何變量的函數對象。
下面通過一個例子來理解一下。首先看看一個Python函數:
def add(x, y): return x+y # call the function add(1, 2) # Output: 3
上述函數名為add, 它需要兩個參數x和y,并返回它們的和。
接下來,我們把上面的函數變成一個lambda函數:
list_a = [1, 2, 3, 4, 5] filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object even_num = list(filter_obj) # Converts the filer obj to a list print(even_num) # Output: [2, 4]
在lambda x, y : x + y
中,x和y是函數的參數,x+y
是表達式,它被執行并返回結果。lambda x, y : x + y
返回的是一個函數對象,它可以被賦值給任何變量。在本例中函數對象被賦值給了add變量。如果我們查看add的type,可以看到它是一個function
type(add) # Output: function
絕大多數lambda函數作為一個參數傳給一個需要函數對象為參數的函數,比如map,reduce,filter等函數。
map的基本語法如下:
map(function_object, iterable1, iterable2, ...)
map函數需要一個函數對象和任意數量的iterables,如list,dictionary等。它為序列中的每個元素執行function_object,并返回由函數對象修改的元素組成的列表。
示例如下:
def add2(x): return x+2map(add2, [1,2,3,4]) # Output: [3,4,5,6]
在上面的例子中,map對list中的每個元素1,2,3,4執行add2函數并返回[3,4,5,6]
接著看看如何用map和lambda重寫上面的代碼:
map(lambda x: x+2, [1,2,3,4]) #Output: [3,4,5,6]
僅僅一行即可搞定!
使用map和lambda迭代dictionary:
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}] map(lambda x : x['name'], dict_a) # Output: ['python', 'java'] map(lambda x : x['points']*10, dict_a) # Output: [100, 80] map(lambda x : x['name'] == "python", dict_a) # Output: [True, False]
以上代碼中,dict_a中的每個dict作為參數傳遞給lambda函數。lambda函數表達式作用于每個dict的結果作為輸出。
map函數作用于多個iterables
list_a = [1, 2, 3] list_b = [10, 20, 30] map(lambda x, y: x + y, list_a, list_b) # Output: [11, 22, 33]
這里,list_a和list_b的第i個元素作為參數傳遞給lambda函數。
在Python3中,map函數返回一個惰性計算(lazily evaluated)的迭代器(iterator)或map對象。就像zip函數是惰性計算那樣。
我們不能通過index訪問map對象的元素,也不能使用len()得到它的長度。
但我們可以強制轉換map對象為list:
map_output = map(lambda x: x*2, [1, 2, 3, 4]) print(map_output) # Output: map object: list_map_output = list(map_output) print(list_map_output) # Output: [2, 4, 6, 8]
filter的基本語法如下:
filter(function_object, iterable)
filter函數需要兩個參數,function_object返回一個布爾值(boolean),對iterable的每一個元素調用function_object,filter只返回滿足function_object為True的元素。
和map函數一樣,filter函數也返回一個list,但與map函數不同的是,filter函數只能有一個iterable作為輸入。
示例:
返回偶數:
a = [1, 2, 3, 4, 5, 6] filter(lambda x : x % 2 == 0, a) # Output: [2, 4, 6]
過濾dicts的list:
dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}] filter(lambda x : x['name'] == 'python', dict_a) # Output: [{'name': 'python', 'points': 10}]
和map一樣,filter函數在Python3中返回一個惰性計算的filter對象或迭代器。我們不能通過index訪問filter對象的元素,也不能使用len()得到它的長度。
list_a = [1, 2, 3, 4, 5] filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object even_num = list(filter_obj) # Converts the filer obj to a list print(even_num) # Output: [2, 4]
關于Python知識點的lambda和map及filter是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。