橡皮擦爱榔,一個(gè)逗趣的互聯(lián)網(wǎng)高級(jí)網(wǎng)蟲(chóng),新的系列糙及,讓我們一起
Be More Pythonic
详幽。
@[toc](滾雪球?qū)W Python 第二輪)
已完成的文章清單
- 滾雪球?qū)W Python 第二輪開(kāi)啟,進(jìn)階之路浸锨,列表與元組那些事兒
- 說(shuō)完列表說(shuō)字典唇聘,說(shuō)完字典說(shuō)集合,滾雪球?qū)W Python
- 關(guān)于 Python 中的字符串柱搜,我在補(bǔ)充兩點(diǎn)迟郎,滾雪球?qū)W Python
- 列表推導(dǎo)式與字典推導(dǎo)式,滾雪球?qū)W Python
- 滾雪球?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)題:
- 使用
map
函數(shù)休里,不需要?jiǎng)?chuàng)建一個(gè)空列表; - 調(diào)用函數(shù)的時(shí)候赃承,不需要帶括號(hào)了妙黍,
map
函數(shù)會(huì)自動(dòng)調(diào)用目標(biāo)函數(shù); -
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)閱讀
今天是持續(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>豁状。