在python中有一些有意思的內(nèi)置函數(shù),例如map()、filter()、reduce()函數(shù),總結(jié)一下加深理解。
-
lambda關(guān)鍵字
-
map函數(shù)
-
filter函數(shù)
-
sorted函數(shù)
-
zip函數(shù)
以上四種函數(shù)均返回的是對(duì)象,需在外面加list并print才能顯示
一、lambda表達(dá)式:匿名函數(shù)
原文地址:https://www.cnblogs.com/hf8051/p/8085424.html
-
lambda表達(dá)式,通常是在需要一個(gè)函數(shù),但是又 不想費(fèi)神去命名一個(gè)函數(shù)的場(chǎng)合下使用 ,也就是指匿名函數(shù)。
-
lambda所表示的 匿名函數(shù)的內(nèi)容應(yīng)該是很簡(jiǎn)單的,如果復(fù)雜的話(huà),干脆就重新定義一個(gè)函數(shù) 了,使用lambda就有點(diǎn)過(guò)于本末倒置了。
-
lambda就是用來(lái)定義一個(gè)匿名函數(shù)的,如果還要給他綁定一個(gè)名字的話(huà),就會(huì)顯得有點(diǎn)畫(huà)蛇添足,通常是直接使用lambda函數(shù)
表達(dá)形式: lambda param1,…:return_value
和param相當(dāng)于定義函數(shù) 時(shí)候傳入的形參,return_value相當(dāng)于return后面的值
1、應(yīng)用在函數(shù)式編程中
像map、reduce、sorted、filter函數(shù)都支持函數(shù)作為參數(shù),可以在其中嵌套使用,非常清晰明了。
# 需求:將列表中的元素按照絕對(duì)值大小進(jìn)行升序排列
list1 = [3,5,-4,-1,0,-2,-6]
sorted(list1, key=lambda x: abs(x))
當(dāng)然,也可以如下:
list1
=
[
3
,
5
,
-
4
,
-
1
,
0
,
-
2
,
-
6
]
def
get_abs
(
x
)
:
return
abs
(
x
)
sorted
(
list1
,
key
=
get_abs
)
只不過(guò)這種方式的代碼看起來(lái)不夠Pythonic
2、應(yīng)用在閉包中
def
get_y
(
a
,
b
)
:
return
lambda
x
:
ax
+
b
y1
=
get_y
(
1
,
1
)
當(dāng)然,也可以用常規(guī)函數(shù)實(shí)現(xiàn)閉包,如下:
def
get_y
(
a
,
b
)
:
def
func
(
x
)
:
return
ax
+
b
return
func
y1
=
get_y
(
1
,
1
)
二、map函數(shù):
功能 : 求一個(gè)序列或者多個(gè)序列進(jìn)行函數(shù)映射之后的值,就該想到map這個(gè)函數(shù)
語(yǔ)法
:
map(function, iterable)
:
接收兩個(gè)參數(shù),第一個(gè)為函數(shù),第二個(gè)為序列,序列的每個(gè)元素執(zhí)行函數(shù)操作,并傳入新的map對(duì)象中。
參數(shù) :
- function:用def或用lambda定義。
- iterable:一個(gè)或多個(gè)可迭代的對(duì)象,可以是字符串、列表、字典。
因?yàn)榉祷氐氖且粋€(gè)map對(duì)象,所以不能直接輸出,可以在其外面套上list()來(lái)顯示或者通過(guò)for循環(huán)append顯示。
通過(guò)例子加深理解
def
square
(
x
)
:
return
x
*
x
a
=
list
(
map
(
square
,
[
1
,
2
,
3
]
)
)
print
(
a
)
#上下兩段代碼相等
a
=
list
(
map
(
lambda
x
:
x
**
2
,
[
1
,
2
,
3
]
)
)
print
(
a
)
輸出結(jié)果 :[1, 4, 9]
map,不止能傳入一個(gè)可迭代對(duì)象做為參數(shù)。也可以傳入兩個(gè)
ls1
=
'ABC'
ls2
=
'abc'
print
(
list
(
map
(
lambda
x
,
y
:
x
+
y
,
ls1
,
ls2
)
)
)
輸出結(jié)果:[‘Aa’, ‘Bb’, ‘Cc’]
三、filter函數(shù)
功能 :filter的功能是過(guò)濾掉序列中不符合函數(shù)條件的元素,當(dāng)序列中要?jiǎng)h減的元素可以用某些函數(shù)描述時(shí),就應(yīng)該想起filter函數(shù)。
語(yǔ)法 :filter(function, iterable)
接收兩個(gè)參數(shù),第一個(gè)為函數(shù),第二個(gè)為序列,序列的每個(gè)元素作為參數(shù)傳遞給函數(shù)進(jìn)行判斷,返回True或False,將返回True的元素放到filter對(duì)象中。
參數(shù) :
- function def或lambda定義
- iterable 元組、字符串、字典、列表
因?yàn)榉祷氐氖且粋€(gè)對(duì)象,所以不能直接輸出,可以在其外面套上list()來(lái)顯示
a
=
list
(
filter
(
lambda
x :x
%
2
==
0
,
[
1
,
2
,
3
,
4
]
)
)
print
(
a
)
輸出結(jié)果:[2,4]
四、sorted函數(shù)
原文地址:https://www.cnblogs.com/sysu-blackbear/p/3283993.html
功能
:對(duì)List、Dict進(jìn)行排序
語(yǔ)法
: sorted(iterable, cmp=None, key=None, reverse=False)
參數(shù)
:
iterable:迭代對(duì)象;
cmp:用于比較的函數(shù),比較什么由key決定;
key:用列表元素的某個(gè)屬性或函數(shù)進(jìn)行作為關(guān)鍵字,有默認(rèn)值,迭代集合中的一項(xiàng);
reverse:排序規(guī)則. reverse = True 降序 或者 reverse = False 升序,有默認(rèn)值。
返回值:是一個(gè)經(jīng)過(guò)排序的可迭代類(lèi)型,與iterable一樣。
五、zip函數(shù)
功能
:zip() 函數(shù)用于將可迭代對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象。
如果各個(gè)可迭代對(duì)象的元素
個(gè)數(shù)不一致
,則返回的對(duì)象長(zhǎng)度與
最短的可迭代對(duì)象
相同。
利用 * 號(hào)操作符,與zip相反,進(jìn)行解壓。
語(yǔ)法 : zip(iterable1,iterable2, …)
參數(shù) :iterable – 一個(gè)或多個(gè)可迭代對(duì)象(字符串、列表、元祖、字典)
>>
>
a
=
[
1
,
2
,
3
]
#此處可迭代對(duì)象為列表
>>
>
b
=
[
4
,
5
,
6
]
>>
>
c
=
[
4
,
5
,
6
,
7
,
8
]
>>
>
zipped
=
zip
(
a
,
b
)
>>
>
zipped
<
zip
object
at
0x02B01B48
>
#返回的是一個(gè)對(duì)象
>>
>
list
(
zipped
)
[
(
1
,
4
)
,
(
2
,
5
)
,
(
3
,
6
)
]
#使用list()函數(shù)轉(zhuǎn)換為列表
>>
>
list
(
zip
(
a
,
c
)
)
[
(
1
,
4
)
,
(
2
,
5
)
,
(
3
,
6
)
]
>>
>
zipped
=
zip
(
a
,
b
)
>>
>
list
(
zip
(
*
zipped
)
)
#解壓也使用list進(jìn)行轉(zhuǎn)換
[
(
1
,
2
,
3
)
,
(
4
,
5
,
6
)
]
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
