溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python知識點的lambda和map及filter是什么

發(fā)布時間:2021-10-25 18:00:37 來源:億速云 閱讀:131 作者:柒染 欄目:編程語言

這篇文章給大家介紹Python知識點的lambda和map及filter是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

通過示例介紹Python中的lambda,map,filter 函數(shù)的使用方法。

lambda

lambda 操作符(或 lambda函數(shù))通常用來創(chuàng)建小巧的,一次性的匿名函數(shù)對象。它的基本語法如下:

lambda arguments : expression

lambda操作符可以有任意數(shù)量的參數(shù),但是它只能有一個表達式,且不能包含任何語句,返回一個可以賦值給任何變量的函數(shù)對象。

下面通過一個例子來理解一下。首先看看一個Python函數(shù):

def add(x, y):
    return x+y
    
# call the function
add(1, 2)  # Output: 3

上述函數(shù)名為add, 它需要兩個參數(shù)x和y,并返回它們的和。
接下來,我們把上面的函數(shù)變成一個lambda函數(shù):

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是函數(shù)的參數(shù),x+y是表達式,它被執(zhí)行并返回結果。
lambda x, y : x + y返回的是一個函數(shù)對象,它可以被賦值給任何變量。在本例中函數(shù)對象被賦值給了add變量。如果我們查看add的type,可以看到它是一個function

type(add)  # Output: function

絕大多數(shù)lambda函數(shù)作為一個參數(shù)傳給一個需要函數(shù)對象為參數(shù)的函數(shù),比如map,reduce,filter等函數(shù)。

map

map的基本語法如下:

map(function_object, iterable1, iterable2, ...)

map函數(shù)需要一個函數(shù)對象和任意數(shù)量的iterables,如list,dictionary等。它為序列中的每個元素執(zhí)行function_object,并返回由函數(shù)對象修改的元素組成的列表。
示例如下:

def add2(x):
    return x+2map(add2, [1,2,3,4])  # Output: [3,4,5,6]

在上面的例子中,map對list中的每個元素1,2,3,4執(zhí)行add2函數(shù)并返回[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作為參數(shù)傳遞給lambda函數(shù)。lambda函數(shù)表達式作用于每個dict的結果作為輸出。

map函數(shù)作用于多個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個元素作為參數(shù)傳遞給lambda函數(shù)。

在Python3中,map函數(shù)返回一個惰性計算(lazily evaluated)的迭代器(iterator)或map對象。就像zip函數(shù)是惰性計算那樣。
我們不能通過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的基本語法如下:

filter(function_object, iterable)

filter函數(shù)需要兩個參數(shù),function_object返回一個布爾值(boolean),對iterable的每一個元素調用function_object,filter只返回滿足function_object為True的元素。

和map函數(shù)一樣,filter函數(shù)也返回一個list,但與map函數(shù)不同的是,filter函數(shù)只能有一個iterable作為輸入。
示例:
返回偶數(shù):

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函數(shù)在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是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI