函式lambda、map、filter,是python中的重要知識點。本篇文章,將通過示例,來介紹python中的lambda、map、filter函式的使用方法。
640?wx_fmt=png
lambda
lambda操作符(或lambda函式)通常用來建立小巧的,一次性的匿名函式物件。它的基本語法如下:
lambda arguments : expression
lambda操作符可以有任意數量的引數,但是它只能有乙個表示式,且不能包含任何語句,返回乙個可以賦值給任何變數的函式物件。
下面通過乙個例子來理解一下。首先看看乙個python函式:
def add(x, y):
return x+y
add(1, 2) # output: 3
上述函式名為add, 它需要兩個引數x和y,並返回它們的和。接下來,我們把上面的函式變成乙個lambda函式:
add = lambda x, y : x + y
print(add(1,2)) # output: 3
在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等函式。
640?wx_fmt=png
mapmap的基本語法如下:
map(function_object, iterable1, iterable2, …)
map函式需要乙個函式物件和任意數量的iterables,如list、dictionary等。它為序列中的每個元素執行function_object,並返回由函式物件修改的元素組成的列表。
示例如下:
def add2(x):
return x+2
map(add2, [1,2,3,4])
在上面的例子中,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 = [,]
map(lambda x : x[『name』], dict_a)
map(lambda x : x[『points』]*10, dict_a)
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)
這裡,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)
640?wx_fmt=png
filter
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)
過濾dicts的list:
dict_a = [,]
filter(lambda x : x[『name』] == 『python』, dict_a)
和map一樣,filter函式在python3中返回乙個惰性計算的filter物件或迭代器。我們不能通過index訪問filter物件的元素,也不能使用len()得到它的長度。
list_a = [1, 2, 3, 4, 5]
filter_obj = filter(lambda x: x % 2 == 0, list_a)
even_num = list(filter_obj)
print(even_num) # output: [2, 4]
程式設計師的三大難題 禿頂 面試 找女朋友
如果說女朋友是程式設計師會遇到的第一大難題的話,那麼面試應該是當之無愧的排行讓程式設計師最頭疼的第二大難題,禿頂勉強排在第三。多數程式設計師都不太喜歡跟外行解釋程式設計師到底是幹什麼的,但是因為白板面試太遭程式設計師恨了,以至於多數也不得不跟外行吐槽什麼是白板面試,可見白板面試到底有多讓人頭疼。什麼...
程式設計師的「三大死穴」
模糊了雙眼,哦,近視!這點不用過多解釋了吧,戴眼鏡的人太多了。看看現在中小學,無論是因為看書 看電視 看電腦,幾乎各個都是四眼神童,此後的人生中,要一直忍受各個眼鏡店的無情盤剝。想要保護眼睛,有哪些簡單的方法呢?最重要的,是每看 1 小時電腦,就去看看遠處的綠色植物 10 分鐘。但是請注意,這裡最重...
黑馬程式設計師 04 三大特性
三大特性 封裝 繼承和多型 1 set 方法和get方法 public型別的成員可以被隨意訪問,應該使用 set方法和 get方法來管理成員的訪問,這樣做可以達到過濾不合理的值 遮蔽內部的賦值過程 讓外界不必關注內部的細節等好處 2 set方法 3 get方法 4 示例 import 宣告 inte...