filterobjectReturnaniteratoryieldingthoseitemsofiterableforwhichfunction(item)istrue.IffunctionisNone,returntheitemsthataretrue.從Doc的簡(jiǎn)單描述可" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

filter用法--Python

系統(tǒng) 1802 0

filter被稱(chēng)為高階函數(shù)是有道理的。

            
              filter(self, /, *args, **kwargs)

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

Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true.
            
          

?從Doc的簡(jiǎn)單描述可以看出,filter的主要作用是通過(guò)function對(duì)iterable中的元素進(jìn)行過(guò)濾,并返回一個(gè)迭代器(iterator),其中是function返回True的元素。如果function傳入None,則返回所有本身可以判斷為T(mén)rue的元素。

例1:

            
                  l = [x for x in range(10)]
    print(list(filter(lambda x : x%2 == 0, l)))
    #輸出[2,4,6,8]
            
          

因?yàn)閒ilter返回的是一個(gè)iterator,所以輸出的時(shí)候需要用list進(jìn)行轉(zhuǎn)換。

例2:

            
                  l = [x for x in range(0, 10)]
    print(list(filter(None, l)))
    #輸出[1,2,3,4,5,6,7,8,9]
            
          

和例1的輸入略有區(qū)別,輸入是0~9,filter的第一個(gè)參數(shù)傳入了None,所以在迭代過(guò)程中,0被判斷為False從而被過(guò)濾,1~9被保留下來(lái)。這個(gè)方法可以替代for循環(huán)的數(shù)據(jù)拾取。

通過(guò)上面的例子可以看出,調(diào)用filter時(shí)并沒(méi)有觸發(fā)過(guò)濾過(guò)程,因?yàn)檎{(diào)用filter函數(shù)只是返回了一個(gè)iterator,它是惰性計(jì)算,只有next或者list的時(shí)候,才真正開(kāi)始計(jì)算過(guò)程。

上面是兩個(gè)基本的用法,接下來(lái)看filter的更高級(jí)一點(diǎn)兒的用法。

???

            
              def _odd_iter():
        n = 1
        while True:
            n = n + 2
            yield n
            
    def _not_divisible(n):
        return lambda x : x%n>0
     
    def primes():
        yield 2
        it = _odd_iter()
        ftr = filter(_not_divisible(2), it) #1
        while True:
            n = next(ftr )        #2
            yield n                
            ftr = filter(_not_divisible(n), ftr ) #3
            
    for n in primes():
        if n < 100:
            print('now:',n)
        else:
            break
            
          

通過(guò)這個(gè)例子,可以看到filter的兩個(gè)高級(jí)用法:

1.其實(shí)filter返回的是一個(gè)filter對(duì)象。#3行通過(guò)重復(fù)賦值,可以向filter中添加多個(gè)過(guò)濾器。例子中,就是通過(guò)每次執(zhí)行#3行,把當(dāng)前素?cái)?shù)作為新的被除數(shù)條件加入到過(guò)濾器ftr 中,所以在for循環(huán)的后續(xù)迭代中,每次都增加一個(gè)素?cái)?shù)條件進(jìn)入過(guò)濾器。

通過(guò)這種重復(fù)賦值的方法,可以給filter添加多個(gè)過(guò)濾函數(shù),極大的加強(qiáng)了過(guò)濾功能。

2. filter的第二個(gè)參數(shù)可以傳入iterator。當(dāng)然,此時(shí)就不能用list取filter的結(jié)果,只能用next(filter對(duì)象)取下一個(gè)過(guò)濾結(jié)果為T(mén)rue的元素
?


更多文章、技術(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ì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 莱阳市| 青神县| 孝义市| 荔波县| 乡宁县| 醴陵市| 蚌埠市| 淳安县| 开化县| 云林县| 德钦县| 武隆县| 公主岭市| 宁夏| 平阴县| 普陀区| 会理县| 金山区| 修武县| 太仆寺旗| 临朐县| 平果县| 平凉市| 丹阳市| 海安县| 秭归县| 剑阁县| 凤冈县| 美姑县| 连南| 玉门市| 霍城县| 乡城县| 昌邑市| 涿州市| 巍山| 云霄县| 义乌市| 临夏市| 光泽县| 昭觉县|