日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

filter()函數(shù)--python

 融水公子 2018-09-15
filter()函數(shù)用于過濾序列。

和map()類似,filter()也接收一個(gè)函數(shù)和一個(gè)序列。和map()不同的是,filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。

例如,在一個(gè)list中,刪掉偶數(shù),留奇數(shù),可以這么寫:

def is_odd(n):
    return n % 2 == 1

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結(jié)果: [1, 5, 9, 15]
--------------------------------------------------------------
把一個(gè)序列中的字符串掉,可以這么寫:

def not_empty(s):
    return s and s.strip()

list(filter(not_empty, ['A', '', 'B', None, 'C', '  ']))
# 結(jié)果: ['A', 'B', 'C']
--------------------------------------------------------------
不斷篩下去,就可以得到所有的素?cái)?shù)。

用Python來實(shí)現(xiàn)這個(gè)算法,可以先構(gòu)造一個(gè)從3開始的奇數(shù)序列:

def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n
注意這是一個(gè)生成器,并且是一個(gè)無限序列。

然后定義一個(gè)篩選函數(shù):

def _not_divisible(n):
    return lambda x: x % n > 0
最后,定義一個(gè)生成器,不斷返回下一個(gè)素?cái)?shù):

def primes():
    yield 2
    it = _odd_iter() # 初始序列
    while True:
        n = next(it) # 返回序列的第一個(gè)數(shù)
        yield n
        it = filter(_not_divisible(n), it) # 構(gòu)造新序列
這個(gè)生成器先返回第一個(gè)素?cái)?shù)2,然后,利用filter()不斷產(chǎn)生篩選后的新的序列。

由于primes()也是一個(gè)無限序列,所以調(diào)用時(shí)需要設(shè)置一個(gè)退出循環(huán)的條件:

# 打印1000以內(nèi)的素?cái)?shù):
for n in primes():
    if n < 1000:
        print(n)
    else:
        break
注意到Iterator是惰性計(jì)算的序列,所以我們可以用Python表示“全體自然數(shù)”,“全體素?cái)?shù)”這樣的序列,而代碼非常簡潔。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多