當前位置:
首頁 > 科技 > 程序員秒解 Python 三大難題,他做對了什麼?

程序員秒解 Python 三大難題,他做對了什麼?

作者 | veelion

責編 | 胡巍巍

函數lambda、map、filter,是Python中的重要知識點。本篇文章,將通過示例,來介紹Python中的lambda、map、filter函數的使用方法。


lambda

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

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

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

上述函數名為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。

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


map

map的基本語法如下:

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

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

示例如下:

defadd2(x):

returnx+2

map(add2, [1,2,3,4])

# Output: [3,4,5,6]

在上面的例子中,map對list中的每個元素1,2,3,4執行add2函數並返回[3,4,5,6]。接著看看,如何用map和lambda重寫上面的代碼:

map(lambdax: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(lambdax:x["name"], dict_a)

# Output: ["python", "java"]

map(lambdax:x["points"]*10, dict_a)

# Output: [100, 80]

map(lambdax: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:

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)

# 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]

作者:veelion,具有十年開發經驗,主要使用Python、C++語言,從事網路爬蟲、搜索引擎、自然語言理解處理等領域的研發工作。

聲明:本文為作者投稿,版權歸對方所有。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

堅守普惠 AI,看華為雲如何讓 AI 落地!
圖靈獎得主Silvio Micali上海之行講了啥?都在這裡了

TAG:CSDN |