Python內(nèi)置函數(shù)map和filter,傻傻分不清楚?
回復“資源”即可獲贈Python學習資料
大家好,我是皮皮。
一、前言
前幾天在Python最強王者交流群有個叫【Chloe】的粉絲問了Python內(nèi)置函數(shù)的問題,如下圖所示。

下圖是她的原始內(nèi)容。
hello,?請問map()?和?filter()?有啥區(qū)別??下面的filter()?為啥結(jié)果不是[0,?1,?2,?4,?8]
list_1?=?[2**x?for?x?in?range(5)]
print(list_1)??#?[1,?2,?4,?8,?16]
list_2?=?list(map(lambda?x:?x//2,?list_1))
print(list_2)??#?[0,?1,?2,?4,?8]
list_2?=?list(filter(lambda?x:?x//2,?list_1))
print(list_2)???#?[2,?4,?8,?16]
二、實現(xiàn)過程
這里【瑜亮老師】給出了一個解答,Python3中filter函數(shù)用于過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表。這里面有3層意思:
1.先做判斷,運行結(jié)果為True的才會被選中
2.返回的值是原來的元素,而不是運算后的結(jié)果
3.filter函數(shù)的返回值是個迭代器
元素1//2的結(jié)果是0,是False,因此會被舍棄。其余幾個元素的運算結(jié)果都是True(非0就是True),因此,結(jié)果列表只會有4個元素。

后來【月神】補充了一下,filter和map一樣,返回的是迭代器,map返回給定函數(shù)的計算值,filter是使用給定的函數(shù)作為判斷依據(jù):類似于:
(map):[i // 2 for i in list1]
(filter):[i for i in list1 if i // 2]
map和filter返回一個迭代器,迭代器都可以轉(zhuǎn)換為特定的列表生成式,使用列表生成式,可能更明白一點。

三、總結(jié)
大家好,我是皮皮。這篇文章主要盤點了Python內(nèi)置函數(shù)map和filter的區(qū)別,文中針對該問題給出了具體的解析和代碼演示,幫助粉絲順利解決了問題。
最后感謝粉絲【Chloe】提問,感謝【瑜亮老師】、【月神】給出的代碼和具體解析,感謝【dcpeng】等人參與學習交流。
小伙伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探討學習。
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學習群請在后臺回復【入群】
萬水千山總是情,點個【在看】行不行
