python數(shù)據(jù)操作之lambda表達(dá)式詳情
1 前言
在 Java 和 js 中,lambda
箭頭函數(shù)是十分常見(jiàn)的操作,這種表達(dá)方式在使用時(shí)非常的簡(jiǎn)便。在python
的語(yǔ)法中也有應(yīng)用場(chǎng)景,lambda
是python
預(yù)留的關(guān)鍵字,帶有該關(guān)鍵字的都視為lambda
,
其表現(xiàn)形式如下:
# lambda 是表達(dá)式, arg 是用戶輸入?yún)?shù) expression 是函數(shù)表達(dá)式 lambda [arg1 [,arg2,.....argn]]:expression
2 lambda 的特性
python 中 lambda 表達(dá)式的特性如下所示:
- 表達(dá)式是匿名的,lambda 只是一個(gè)一個(gè)表達(dá)式,類似于但是沒(méi)有名字。
- 表達(dá)式有輸入和輸出,輸入是 arg 的參數(shù),輸出是表達(dá)式計(jì)算的結(jié)果。
- 具有命名空間,只能在命名空間之內(nèi)獲取和操作參數(shù)變量。
常見(jiàn)的表達(dá)式如下所示:
lambda x, y: x + y # 函數(shù)輸入是x和y,輸出是 x + y lambda *args: sum(args) # 輸入是任意個(gè)數(shù)參數(shù),輸出是多個(gè)參數(shù)的和,輸入?yún)?shù)必須是數(shù)字 lambda **kwargs: 2 # 輸入是任意鍵值對(duì)參數(shù),輸出結(jié)果為固定值
3 lambda 的一些用法
3.1 map 函數(shù)
map 函數(shù)會(huì)根據(jù)提供的函數(shù)對(duì)可迭代參數(shù)進(jìn)行逐個(gè)調(diào)用,并返回一個(gè)可迭代對(duì)象結(jié)果,其語(yǔ)法和使用方式如下所示:
# function 代表為函數(shù),iterable 代表一個(gè)可迭代對(duì)象,也可以傳入多個(gè)對(duì)象 map(function, iterable, ...) # 只有一個(gè)可迭代參數(shù)情況 def cal_num(x): return x ** 2 + 2 * x - 3 # 準(zhǔn)備的數(shù)據(jù) read_list = [2, 3, 4] # 因?yàn)閙ap 的結(jié)果是一個(gè)可迭代對(duì)象,所以轉(zhuǎn)換為 list 對(duì)象打印結(jié)果 re_list = list(map(cal_num, read_list)) #計(jì)算的結(jié)果 [5, 12, 21] print(re_list) # 多個(gè)可迭代參數(shù)情況,逐個(gè)計(jì)算和 def cal_add_num(x, y): return x + y # 準(zhǔn)備的數(shù)據(jù) read_list = [2, 3, 4] re_list = list(map(cal_add_num, read_list, read_list)) # 計(jì)算結(jié)果 [4, 6, 8] print(re_list) # 關(guān)于多個(gè)迭代的操作,也可以采用 zip 將多個(gè)可迭代對(duì)象進(jìn)行處理,組成元組對(duì)象,進(jìn)行循環(huán)計(jì)算處理。 result_list = [] for k1, k2 in zip(read_list,read_list): result_list.append(k1 + k2)
3.2 reduce 函數(shù)
reduce 函數(shù)會(huì)對(duì)參數(shù)列表中的元素進(jìn)行累積計(jì)算,通常的做法就是對(duì)一列數(shù)組求和,前篇講述的 java Stream 關(guān)于 reduce 的操作和本例是一樣的,其中的 lambda 可以看成是數(shù)列的推導(dǎo)式:
# function 代表為函數(shù),iterable 代表一個(gè)可迭代對(duì)象,initializer 指定起始值 reduce(function, iterable[, initializer]) # 計(jì)算數(shù)組之和,lambda 寫法,起始值為 10, 計(jì)算結(jié)果為 25 res = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5], 10)
這里需要說(shuō)明的是,在 python3 中 reduce 已經(jīng)從全局命名空間中移除,被放在了 functools 模塊中,如果需要使用,則需要進(jìn)行引入from functools import reduce
。
3.3 sorted 函數(shù)
sorted 函數(shù),顧名思義就是對(duì)可迭代對(duì)象進(jìn)行排序操作,其語(yǔ)法格式和用法如下所示:
# iterable 為可迭代對(duì)象 cmp 為比較函數(shù) 排序字段和排序順序 sorted(iterable[, cmp[, key[, reverse]]]) # 1、簡(jiǎn)單排序 a = [5,7,6,3,4,1,2] # 使用sorted,保留原列表,不改變列表a的值 # 排序結(jié)果為 [1, 2, 3, 4, 5, 6, 7] b = sorted(a) # 2、使用 lambda 指定排序函數(shù)方式排序 # 待排序?qū)ο? x_list = [('b',2),('a',1),('c',3),('d',4)] # 排序結(jié)果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)] y_list = sorted(x_list, cmp=lambda x,y:cmp(x[1],y[1])) # 3、利用參數(shù) key 排序,依然使用 lambda 指定元祖的第一個(gè)數(shù)據(jù) # 計(jì)算結(jié)果:[('a', 1), ('b', 2), ('c', 3), ('d', 4)] z_list = sorted(x_list, key=lambda x:x[1]) # 4、指定排序順序 user_list = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] # 排序結(jié)果 [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] re_list = sorted(user_list, key=lambda s: s[2], reverse=True)
3.4 filter 函數(shù)
filter 函數(shù)相對(duì)來(lái)說(shuō)就比較簡(jiǎn)單了,主要就是過(guò)濾操作,過(guò)濾掉不符合表達(dá)式的數(shù)據(jù),得到最終的結(jié)果。
# function 為過(guò)濾函數(shù),返回結(jié)果為 true 或者 false, iterable 為可迭代對(duì)象 filter(function, iterable) # 判斷是否為奇數(shù) def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4]) print(list(newlist))
4 總結(jié)
文章主要講述了 python 的 lambda 的相關(guān)操作,主要就是 lambda 表達(dá)式與 map、filter、 sorted、 reduce 函數(shù)的配合使用。
到此這篇關(guān)于python數(shù)據(jù)操作之 lambda表達(dá)式詳情的文章就介紹到這了,更多相關(guān)python lambda表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 操作SQLite數(shù)據(jù)庫(kù)的示例
這篇文章主要介紹了Python 操作SQLite數(shù)據(jù)庫(kù)的示例,幫助大家更好的利用python操作數(shù)據(jù)庫(kù)處理數(shù)據(jù),感興趣的朋友可以了解下2020-10-10pycharm實(shí)現(xiàn)設(shè)置自動(dòng)的參數(shù)注釋標(biāo)識(shí)
這篇文章主要介紹了pycharm實(shí)現(xiàn)設(shè)置自動(dòng)的參數(shù)注釋標(biāo)識(shí),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02python語(yǔ)言是免費(fèi)還是收費(fèi)的?
在本篇文章里小編給大家分享的是關(guān)于python語(yǔ)言是否免費(fèi)的相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。2020-06-06Numpy截取指定范圍內(nèi)的數(shù)據(jù)方法
今天小編就為大家分享一篇Numpy截取指定范圍內(nèi)的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11python3.9和pycharm的安裝教程并創(chuàng)建簡(jiǎn)單項(xiàng)目的步驟
這篇文章主要介紹了python3.9和pycharm的安裝教程并創(chuàng)建簡(jiǎn)單項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python字符串中如何去除數(shù)字之間的逗號(hào)
這篇文章主要介紹了Python字符串中如何去除數(shù)字之間的逗號(hào),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05PyQt5 實(shí)現(xiàn)字體大小自適應(yīng)分辨率的方法
今天小編就為大家分享一篇PyQt5 實(shí)現(xiàn)字體大小自適應(yīng)分辨率的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06OpenCV連通域數(shù)量統(tǒng)計(jì)學(xué)習(xí)示例
這篇文章主要為大家介紹了OpenCV連通域數(shù)量統(tǒng)計(jì)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06