filter函數(shù)有點(diǎn)意思

filter函數(shù)

filter(function, iterable)
filter函數(shù)是python中的高階函數(shù), 第一個(gè)參數(shù)是一個(gè)篩選函數(shù), 第二個(gè)參數(shù)是一個(gè)可迭代對(duì)象, 返回的是一個(gè)生成器類型, 可以通過next獲取值. 這里大致講述下原理, filter()把傳入的function依次作用于iterable的每個(gè)元素, 滿足條件的返回true, 不滿足條件的返回false, 通過true還是false決定將該元素丟棄還是保留.

下面是簡(jiǎn)單的操作, 直接上代碼

  • 處理list
# 列表(list)
a = [1, 2, 3, 4, 5]
list(filter(lambda x: x > 3, a))
# [4, 5]
  • 處理dict
# 字典(dict)
d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
for i in filter(lambda x: x[0] > 3, d.items()):
    print(i)
# (4, 'd')
# (5, 'e')

這里使用d.items(), 所以返回的元素為元組, 下面代碼可以做個(gè)對(duì)比

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
for i in filter(lambda x: x[0] > 3, d):
# 4
# 5

這里的iterable對(duì)象是字典本身d, 這里filter默認(rèn)使用鍵值來篩選, 下面用法也可以進(jìn)行一下, 方便理解

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
for i in d:
  print(i)
# 依次輸出 1 2 3 4 5

這里直接遍歷字典, 不使用d.items(), 默認(rèn)遍歷的是鍵值

d = {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
2 in d
# True
'a' in d
# False
'a' in d.values()
# True

以上代碼判斷2是否存在字典d中, 直接使用2 in d, 默認(rèn)在keys中去尋找, 如果要在values中去找, 則需要使用'a' in d.values()

好了- -, 這里一不小心扯得有點(diǎn)多, 跑題了......回歸正題, 看代碼

a = [1, 2, 3, 4, 5]
filter(lambda x: x > 3, a)
# <filter at 0x25d4f2ae518>
f = _
list(f)
# [4, 5]
list(f)
# []

這里有點(diǎn)意思, 我在這里進(jìn)行了兩次list(f)的操作, 第一次可以輸出正確的值, 第二次就是空值了. 試過好幾次都是這樣, 是不是很神奇...之前我看過一篇文章, 不過忘了是在哪看過的了, 有討論過filter返回的生成器的問題, filter返回的是一個(gè)生成器, 開篇已經(jīng)闡述過了, 但是這個(gè)生成器有點(diǎn)特殊, 只會(huì)存在一次, 對(duì), 只會(huì)存在一次, 本人感覺這是一種優(yōu)化(內(nèi)存優(yōu)化?). 首先返回的是一個(gè)生成器就很優(yōu)化了, 還加了一個(gè)只存在一次的設(shè)定, 感覺這很pythonic啊/哭笑, 但是這也是一個(gè)極難發(fā)現(xiàn)的坑- -!

繼續(xù)折騰, 如果filter會(huì)有這種設(shè)定, 那map這種同樣身為高階函數(shù)的是不是也有相同的設(shè)定呢!!!

a = [1, 2, 3, 4, 5, 6]
map(lambda x: x + 1, a)
# <map at 0x25d4f27a6a0>
m = _
list(m)
# [2, 3, 4, 5, 6, 7]
list(m)
# []

果然, 同為高階的map也存在相同的設(shè)定

好了, 先折騰到這兒了- -

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 〇、前言 本文共108張圖,流量黨請(qǐng)慎重! 歷時(shí)1個(gè)半月,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 19,591評(píng)論 17 410
  • webpack 前端工程化: npm、 cnpm、 yarn、 bower|grund、 gulp、webpack...
    鋒享前端閱讀 495評(píng)論 0 1
  • 好像很多人上大號(hào)要很久,或者幾天才上一次。說實(shí)話,這些說明身體有問題啪。 說過很多次,盡量早上上大號(hào),把宿毒排出。...
    霏霏大吃貨閱讀 785評(píng)論 0 0
  • 一年多前的一次午休,一位同事倒在了洗手間,如果不是正好被中途起床的人看見拔打了120,恐怕人已經(jīng)去了。 他是幸運(yùn)的...
    簡(jiǎn)愛清兒閱讀 251評(píng)論 0 0
  • 第一章戳何歸(一) 二 濟(jì)安城北通青馬河,南接望都原,背靠畫屏山,算得上交通要塞。兼著離京城又遠(yuǎn),皇家勢(shì)利鞭長莫及...
    辰砂眉間閱讀 368評(píng)論 0 2

友情鏈接更多精彩內(nèi)容