'Python中的Lambda,Map和Filter'

Python Java 開心人開發世界 2019-09-17
"

今天的部分介紹了在Python中使用lambda,map和filter函數。我們將介紹每個的基本語法,並通過一些示例來熟悉使用它們。讓我們開始吧!


*** Lambda***

lambda運算符或lambda函數用於在Python中創建小型的、一次性的匿名函數對象

基本語法

lambda arguments : expression

lambda運算符可以有任意數量的參數,但只能有一個表達式。它不能包含任何語句,並返回一個可以分配給任何變量的函數對象。

例子

我們來看看Python中的一個函數:

 def add(x, y): 
return x + y

# Call the function
add(2, 3) # Output: 5

上面的函數名是add它需要兩個參數xy並返回它們的和。

讓我們看看如何將上述函數轉換為lambda函數:

add = lambda x, y : x + y 

print add(2, 3) # Output: 5

在***lambda x中,y:x + y; *x和y是函數的參數,x + y是執行的表達式,其值作為輸出返回。

lambda x,y:x + y返回一個可以賦值給任何變量的函數對象,在這種情況下,函數對象被賦值給* add*變量。

type (add) # Output: function

如果我們檢查add的類型,它就是一個函數。

最重要的是,lambda函數作為參數傳遞給一個函數,該函數需要一個函數對象作為參數,如map,reduce和filter函數。


map

基本語法

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

map函數需要一個函數對象和任意數量的iterables,例如list,dictionary等。它為序列中的每個元素執行function_object,並返回由函數對象修改的元素列表。

例子

def multiply2(x):
return x * 2

map(multiply2, [1, 2, 3, 4]) # Output [2, 4, 6, 8]

在上面的例子中,map對列表中的每個元素[1,2,3,4] 執行multiply2函數,並返回[2,4,6,8]。

讓我們看看如何使用maplambda編寫上面的代碼。

map(lambda x : x*2, [1, 2, 3, 4]) #Output [2, 4, 6, 8]

只需一行代碼!

使用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將作為參數傳遞給傳遞lambda功能。每個dictlambda函數表達式的結果將作為輸出給出。

多個iterable Map函數

我們可以將多個序列傳遞給map函數,如下所示:

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_alist_b的每個第i個元素將作為參數傳遞給lambda函數。

在Python3中,map函數返回一個* iteratormap對象*,它被延遲地計算,類似於zip函數的計算方式。在zip函數文章中更詳細地解釋了延遲求值。

我們不能用索引訪問map對象的元素,也不能*len()*用來查找map對象的長度。

但是,我們可以強制將map輸出(即map對象)轉換為列表,如下所示:

map_output = map(lambda x: x*2, [1, 2, 3, 4])
print(map_output) # Output: map object: <map object at 0x04D6BAB0>
list_map_output = list(map_output)
print(list_map_output) # Output: [2, 4, 6, 8]

Filter

基本語法

filter(function_object, iterable)

該函數需要兩個參數:和一個可迭代的。返回一個布爾值,併為iterable的每個元素調用。只有過濾器返回這些元素為其回報。*filter*``*function_object*``*function_object*``function_object``*true*

與*map*函數一樣,filter函數也返回元素列表。與此不同*map*,該*filter*函數只能有一個可迭代的輸入。

例子

偶數使用過濾功能:

a = [1, 2, 3, 4, 5, 6]
filter(lambda x : x % 2 == 0, a) # Output: [2, 4, 6]

過濾詞典列表:

dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]

filter(lambda x : x['name'] == 'python', dict_a) # Output: [{'name': 'python', 'points': 10}]

類似於*map*,Python3中的過濾器函數返回一個過濾器對象或延遲評估的迭代器。我們不能用索引訪問過濾器對象的元素,也不能*len()*用來查找過濾器對象的長度。

list_a = [1, 2, 3, 4, 5]
filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object <filter at 0x4e45890>
even_num = list(filter_obj) # Converts the filer obj to a list
print(even_num) # Output: [2, 4]

翻譯自:https://medium.com/better-programming/lambda-map-and-filter-in-python-4935f248593

"

相關推薦

推薦中...