1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一個(gè)零差評(píng)的 Python 內(nèi)置庫(kù)

        共 9140字,需瀏覽 19分鐘

         ·

        2021-09-15 13:53

        前言

        最近事情不是很多,想寫(xiě)一些技術(shù)文章分享給大家,同時(shí)也對(duì)自己一段時(shí)間來(lái)碎片化接受的知識(shí)進(jìn)行一下梳理,所謂寫(xiě)清楚才能說(shuō)清楚,說(shuō)清楚才能想清楚,就是這個(gè)道理了。

        很多人都致力于把Python代碼寫(xiě)得更Pythonic,一來(lái)更符合規(guī)范且容易閱讀,二來(lái)一般Pythonic的代碼在執(zhí)行上也更有效率。今天就先給大家介紹一下Python的系統(tǒng)庫(kù)itertools。

        itertools庫(kù)

        迭代器(生成器)在Python中是一種很常用也很好用的數(shù)據(jù)結(jié)構(gòu),比起列表(list)來(lái)說(shuō),迭代器最大的優(yōu)勢(shì)就是延遲計(jì)算,按需使用,從而提高開(kāi)發(fā)體驗(yàn)和運(yùn)行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。

        話雖這么說(shuō)但大家平時(shí)用到的迭代器大概只有range了,而通過(guò)iter函數(shù)把列表對(duì)象轉(zhuǎn)化為迭代器對(duì)象又有點(diǎn)多此一舉,這時(shí)候我們今天的主角itertools就該上場(chǎng)了。

        使用itertools

        itertools中的函數(shù)大多是返回各種迭代器對(duì)象,其中很多函數(shù)的作用我們平時(shí)要寫(xiě)很多代碼才能達(dá)到,而在運(yùn)行效率上反而更低,畢竟人家是系統(tǒng)庫(kù)。

        itertools.accumulate

        簡(jiǎn)單來(lái)說(shuō)就是累加。

        >>> import itertools
        >>> x = itertools.accumulate(range(10))
        >>> print(list(x))
        [0136101521283645]

        itertools.chain

        連接多個(gè)列表或者迭代器。

        >>> x = itertools.chain(range(3), range(4), [3,2,1])
        >>> print(list(x))
        [0120123321]

        itertools.combinations

        求列表或生成器中指定數(shù)目的元素不重復(fù)的所有組合

        >>> x = itertools.combinations(range(4), 3)
        >>> print(list(x))
        [(012), (013), (023), (123)]

        itertools.combinations_with_replacement

        允許重復(fù)元素的組合

        >>> x = itertools.combinations_with_replacement('ABC'2)
        >>> print(list(x))
        [('A''A'), ('A''B'), ('A''C'), ('B''B'), ('B''C'), ('C''C')]

        itertools.compress

        按照真值表篩選元素

        >>> x = itertools.compress(range(5), (TrueFalseTrueTrueFalse))
        >>> print(list(x))
        [023]

        itertools.count

        就是一個(gè)計(jì)數(shù)器,可以指定起始位置和步長(zhǎng)

        >>> x = itertools.count(start=20, step=-1)
        >>> print(list(itertools.islice(x, 0101)))
        [20191817161514131211]

        itertools.cycle

        循環(huán)指定的列表和迭代器

        >>> x = itertools.cycle('ABC')
        >>> print(list(itertools.islice(x, 0101)))
        ['A''B''C''A''B''C''A''B''C''A']

        itertools.dropwhile

        按照真值函數(shù)丟棄掉列表和迭代器前面的元素

        >>> x = itertools.dropwhile(lambda e: e < 5, range(10))
        >>> print(list(x))
        [56789]

        itertools.filterfalse

        保留對(duì)應(yīng)真值為False的元素

        >>> x = itertools.filterfalse(lambda e: e < 5, (153694))
        >>> print(list(x))
        [569]

        itertools.groupby

        按照分組函數(shù)的值對(duì)元素進(jìn)行分組

        >>> x = itertools.groupby(range(10), lambda x: x < 5 or x > 8)                                                                                                
        >>> for condition, numbers in x:                                                  
        ...     print(condition, list(numbers))                                                                                                        
        True [01234]                                                              
        False [5678]                                                                
        True [9]

        itertools.islice

        上文使用過(guò)的函數(shù),對(duì)迭代器進(jìn)行切片

        >>> x = itertools.islice(range(10), 092)
        >>> print(list(x))
        [02468]

        itertools.permutations

        產(chǎn)生指定數(shù)目的元素的所有排列(順序有關(guān))

        >>> x = itertools.permutations(range(4), 3)
        >>> print(list(x))
        [(012), (013), (021), (023), (031), (032), (102), (103), (120), (123), (130), (132), (201), (20,3), (210), (213), (230), (231), (301), (302), (310), (312), (320), (321)]

        itertools.product

        產(chǎn)生多個(gè)列表和迭代器的(積)

        >>> x = itertools.product('ABC', range(3))
        >>>
        >>> print(list(x))
        [('A'0), ('A'1), ('A'2), ('B'0), ('B'1), ('B'2), ('C'0), ('C'1), ('C'2)]

        itertools.repeat

        簡(jiǎn)單的生成一個(gè)擁有指定數(shù)目元素的迭代器

        >>> x = itertools.repeat(05)
        >>> print(list(x))
        [00000]

        itertools.starmap

        類(lèi)似map

        >>> x = itertools.starmap(str.islower, 'aBCDefGhI')
        >>> print(list(x))
        [TrueFalseFalseFalseTrueTrueFalseTrueFalse]

        itertools.takewhile

        與dropwhile相反,保留元素直至真值函數(shù)值為假。

        >>> x = itertools.takewhile(lambda e: e < 5, range(10))
        >>> print(list(x))
        [01234]

        itertools.tee

        這個(gè)函數(shù)我也不是很懂,似乎是生成指定數(shù)目的迭代器

        >>> x = itertools.tee(range(10), 2)
        >>> for letters in x:
        ...     print(list(letters))
        ...
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

        itertools.zip_longest

        類(lèi)似于zip,不過(guò)已較長(zhǎng)的列表和迭代器的長(zhǎng)度為準(zhǔn)

        >>> x = itertools.zip_longest(range(3), range(5))
        >>> y = zip(range(3), range(5))
        >>> print(list(x))
        [(00), (11), (22), (None, 3), (None, 4)]
        >>> print(list(y))
        [(00), (11), (22)]

        結(jié)語(yǔ)

        大概就總結(jié)到這里,不過(guò)老實(shí)說(shuō)Python的各種語(yǔ)言特性和庫(kù)還是要多用才能熟練,最終達(dá)到隨手拈來(lái)的程度,裝逼的說(shuō)就是由術(shù)入道。

        來(lái)源:憶先    
        鏈接:https://segmentfault.com/a/1190000008590958





        推薦閱讀:

        入門(mén): 最全的零基礎(chǔ)學(xué)Python的問(wèn)題  | 零基礎(chǔ)學(xué)了8個(gè)月的Python  | 實(shí)戰(zhàn)項(xiàng)目 |學(xué)Python就是這條捷徑


        干貨:爬取豆瓣短評(píng),電影《后來(lái)的我們》 | 38年NBA最佳球員分析 |   從萬(wàn)眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個(gè)海量小姐姐素描圖 |碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


        趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


        AI: 會(huì)做詩(shī)的機(jī)器人 | 給圖片上色 | 預(yù)測(cè)收入 | 碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


        小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水?。?/a> | 一鍵把html網(wǎng)頁(yè)保存為pdf!|  再見(jiàn)PDF提取收費(fèi)! | 用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r(jià)機(jī)票提示器! |60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!


        年度爆款文案


        點(diǎn)閱讀原文,領(lǐng)AI全套資料

        瀏覽 15
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            91久久精品国产91久久公交车 | 打屁股play扇肿撅高羞耻h | 国产女人高潮视频 | 中文字幕av一区二区三区谷原希美 | 中文字幕无码精品视频网站 | 北条麻妃精品无套内谢 | 国产操屁眼 | 最新国产亚洲免费在线视频 | 成人免费 做受视频 | 少妇口述性高潮 |