滾雪球?qū)W Python 之內(nèi)置函數(shù):filter暗赶、map鄙币、reduce、zip忆首、enumerate

橡皮擦爱榔,一個(gè)逗趣的互聯(lián)網(wǎng)高級(jí)網(wǎng)蟲(chóng),新的系列糙及,讓我們一起 Be More Pythonic详幽。

@[toc](滾雪球?qū)W Python 第二輪)

已完成的文章清單

  1. 滾雪球?qū)W Python 第二輪開(kāi)啟,進(jìn)階之路浸锨,列表與元組那些事兒
  2. 說(shuō)完列表說(shuō)字典唇聘,說(shuō)完字典說(shuō)集合,滾雪球?qū)W Python
  3. 關(guān)于 Python 中的字符串柱搜,我在補(bǔ)充兩點(diǎn)迟郎,滾雪球?qū)W Python
  4. 列表推導(dǎo)式與字典推導(dǎo)式,滾雪球?qū)W Python
  5. 滾雪球?qū)W Python 之 lambda 表達(dá)式

六聪蘸、filter宪肖、map、reduce健爬、zip控乾、enumerate

這幾個(gè)函數(shù)在 Python 里面被稱(chēng)為高階函數(shù),本文主要學(xué)習(xí)它們的用法娜遵。

6.1 filter

filter 函數(shù)原型如下:

filter(function or None, iterable) --> filter object

第一個(gè)參數(shù)是判斷函數(shù)(返回結(jié)果需要是 True 或者 False)蜕衡,第二個(gè)為序列,該函數(shù)將對(duì) iterable 序列依次執(zhí)行 function(item) 操作设拟,返回結(jié)果是過(guò)濾之后結(jié)果組成的序列慨仿。
簡(jiǎn)單記憶:對(duì)序列中的元素進(jìn)行篩選久脯,獲取符合條件的序列。

my_list = [1, 2, 3]
my_new_list = filter(lambda x: x > 2, my_list)
print(my_new_list)

返回結(jié)果為:<filter object at 0x0000000001DC4F98>镰吆,使用 list 函數(shù)可以輸入序列內(nèi)容帘撰。

6.2 map

map 函數(shù)原型如下:

map(func, *iterables) --> map object

該函數(shù)運(yùn)行之后生成一個(gè) list,第一個(gè)參數(shù)是函數(shù)鼎姊、第二個(gè)參數(shù)是一個(gè)或多個(gè)序列骡和;
下述代碼是一個(gè)簡(jiǎn)單的測(cè)試案例:

my_list = [-1,2,-3]
my_new_list = map(abs,my_list)
print(my_new_list)

上述代碼運(yùn)行完畢,得到的結(jié)果是:<map object at 0x0000000002860390>相寇。使用 print(list(my_new_list)) 可以得到結(jié)果慰于。

map 函數(shù)的第一個(gè)參數(shù),可以有多個(gè)參數(shù)唤衫,當(dāng)這種情況出現(xiàn)后婆赠,后面的第二個(gè)參數(shù)需要是多個(gè)序列。

def fun(x, y):
    return x+y
# fun 函數(shù)有2個(gè)參數(shù)佳励,故需要兩個(gè)序列
my_new_list = map(fun, [1, 2, 3], [4, 4, 4])
print(my_new_list)
print(list(my_new_list))

map 函數(shù)解決的問(wèn)題:

  1. 使用 map 函數(shù)休里,不需要?jiǎng)?chuàng)建一個(gè)空列表;
  2. 調(diào)用函數(shù)的時(shí)候赃承,不需要帶括號(hào)了妙黍,map 函數(shù)會(huì)自動(dòng)調(diào)用目標(biāo)函數(shù);
  3. map 函數(shù)會(huì)自動(dòng)匹配序列中的所有元素瞧剖。

6.3 reduce

reduce 函數(shù)原型如下:

reduce(function, sequence[, initial]) -> value

第一個(gè)參數(shù)是函數(shù)拭嫁,第二個(gè)參數(shù)是序列,返回計(jì)算結(jié)果之后的值抓于。該函數(shù)價(jià)值在于滾動(dòng)計(jì)算應(yīng)用于列表中的連續(xù)值做粤。
測(cè)試代碼如下:

from functools import reduce
my_list = [1, 2, 3]

def add(x, y):
    return x+y

my_new_list = reduce(add, my_list)
print(my_list)
print(my_new_list)

最終的結(jié)果是 6,如果設(shè)置第三個(gè)參數(shù)為 4捉撮,可以運(yùn)行代碼查看結(jié)果怕品,最后得到的結(jié)論是,第三個(gè)參數(shù)表示初始值巾遭,即累加操作初始的數(shù)值肉康。

my_new_list = reduce(add, my_list,4)
print(my_list)
print(my_new_list)

簡(jiǎn)單記憶:對(duì)序列內(nèi)所有元素進(jìn)行累計(jì)操作。

6.4 zip

zip 函數(shù)原型如下:

zip(iter1 [,iter2 [...]]) --> zip object

zip 函數(shù)將可迭代的對(duì)象作為參數(shù)灼舍,將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組迎罗,然后返回由這些元組組成的列表。
如果各個(gè)迭代器的元素個(gè)數(shù)不一樣片仿,則返回列表長(zhǎng)度與最短的對(duì)象相同,利用星號(hào)(*)操作符尤辱,可以將元組解壓為列表砂豌。
測(cè)試代碼如下:

my_list1 = [1,2,3]
my_list2 = ["a","b","c"]
print(zip(my_list1,my_list2))
print(list(zip(my_list1,my_list2)))

展示如何利用 * 操作符:

my_list = [(1, 'a'), (2, 'b'), (3, 'c')]
print(zip(*my_list))
print(list(zip(*my_list)))

輸出結(jié)果如下:

<zip object at 0x0000000002844788>
[(1, 2, 3), ('a', 'b', 'c')]

簡(jiǎn)單記憶:zip 的功能是映射多個(gè)容器的相似索引厢岂,可以方便用于來(lái)構(gòu)造字典。

6.5 enumerate

enumerate 函數(shù)原型如下:

enumerate(iterable, start=0)

參數(shù)說(shuō)明:

  • sequence:一個(gè)序列阳距、迭代器或其他支持迭代對(duì)象塔粒;
  • start:下標(biāo)起始位置。

該函數(shù)用于將一個(gè)可遍歷的數(shù)據(jù)對(duì)象組合為一個(gè)索引序列筐摘,同時(shí)列出數(shù)據(jù)和數(shù)據(jù)下標(biāo)卒茬,一般用在 for 循環(huán)當(dāng)中。
測(cè)試代碼如下:

weekdays = ['Mon', 'Tus', 'Wen', 'Thir']
print(enumerate(weekdays))
print(list(enumerate(weekdays)))

返回結(jié)果為:<enumerate object at 0x0000000002803AB0>咖熟。

6.6 這篇博客的總結(jié)

本文涉及的函數(shù)可以與 lambda 表達(dá)式進(jìn)行結(jié)合圃酵,能大幅度提高編碼效率。最好的學(xué)習(xí)資料永遠(yuǎn)是 官方手冊(cè)

相關(guān)閱讀

  1. Python 爬蟲(chóng) 100 例教程馍管,超棒的爬蟲(chóng)教程郭赐,立即訂閱吧
  2. Python 爬蟲(chóng)小課,精彩 9 講

今天是持續(xù)寫(xiě)作的第 <font color="red">102</font> / 200 天确沸。
如果你想跟博主建立親密關(guān)系捌锭,可以關(guān)注同名公眾號(hào) <font color="red">夢(mèng)想橡皮擦</font>,近距離接觸一個(gè)逗趣的互聯(lián)網(wǎng)高級(jí)網(wǎng)蟲(chóng)罗捎。
博主 ID:夢(mèng)想橡皮擦观谦,希望大家<font color="red">點(diǎn)贊</font>、<font color="red">評(píng)論</font>桨菜、<font color="red">收藏</font>豁状。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雷激,隨后出現(xiàn)的幾起案子替蔬,更是在濱河造成了極大的恐慌,老刑警劉巖屎暇,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件承桥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡根悼,警方通過(guò)查閱死者的電腦和手機(jī)凶异,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挤巡,“玉大人剩彬,你說(shuō)我怎么就攤上這事】蟊埃” “怎么了喉恋?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我轻黑,道長(zhǎng)糊肤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任氓鄙,我火速辦了婚禮馆揉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抖拦。我一直安慰自己升酣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布态罪。 她就那樣靜靜地躺著噩茄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪向臀。 梳的紋絲不亂的頭發(fā)上巢墅,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音券膀,去河邊找鬼君纫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芹彬,可吹牛的內(nèi)容都是我干的蓄髓。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舒帮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼会喝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起玩郊,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肢执,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后译红,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體预茄,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年侦厚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耻陕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刨沦,死狀恐怖诗宣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情想诅,我是刑警寧澤召庞,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布岛心,位于F島的核電站,受9級(jí)特大地震影響篮灼,放射性物質(zhì)發(fā)生泄漏鹉梨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一穿稳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧晌坤,春花似錦逢艘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至商乎,卻和暖如春央拖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹉戚。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工鲜戒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抹凳。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓遏餐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親赢底。 傳聞我的和親對(duì)象是個(gè)殘疾皇子失都,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容