欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python數(shù)據(jù)操作之lambda表達(dá)式詳情

 更新時(shí)間:2022年05月06日 10:58:42   作者:??斜月????  
這篇文章主要介紹了python數(shù)據(jù)操作之lambda表達(dá)式詳情,文章基于python的相關(guān)資料展開(kāi)lambda表達(dá)式具體的內(nèi)容,感興趣的小伙伴可以參考一下

1 前言

在 Java 和 js 中,lambda箭頭函數(shù)是十分常見(jiàn)的操作,這種表達(dá)方式在使用時(shí)非常的簡(jiǎn)便。在python的語(yǔ)法中也有應(yīng)用場(chǎng)景,lambdapython預(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)文章

最新評(píng)論