<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          相見恨晚的 Python 內(nèi)置庫:itertools

          共 9210字,需瀏覽 19分鐘

           ·

          2021-08-16 23:39


          前言
          最近事情不是很多,想寫一些技術(shù)文章分享給大家,同時(shí)也對自己一段時(shí)間來碎片化接受的知識(shí)進(jìn)行一下梳理,所謂寫清楚才能說清楚,說清楚才能想清楚,就是這個(gè)道理了。
          很多人都致力于把Python代碼寫得更Pythonic,一來更符合規(guī)范且容易閱讀,二來一般Pythonic的代碼在執(zhí)行上也更有效率。今天就先給大家介紹一下Python的系統(tǒng)庫itertools。
          itertools庫
          迭代器(生成器)在Python中是一種很常用也很好用的數(shù)據(jù)結(jié)構(gòu),比起列表(list)來說,迭代器最大的優(yōu)勢就是延遲計(jì)算,按需使用,從而提高開發(fā)體驗(yàn)和運(yùn)行效率,以至于在Python 3中map,filter等操作返回的不再是列表而是迭代器。
          話雖這么說但大家平時(shí)用到的迭代器大概只有range了,而通過iter函數(shù)把列表對象轉(zhuǎn)化為迭代器對象又有點(diǎn)多此一舉,這時(shí)候我們今天的主角itertools就該上場了。
          使用itertools
          itertools中的函數(shù)大多是返回各種迭代器對象,其中很多函數(shù)的作用我們平時(shí)要寫很多代碼才能達(dá)到,而在運(yùn)行效率上反而更低,畢竟人家是系統(tǒng)庫。
          itertools.accumulate
          簡單來說就是累加。
          >>> 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ù)器,可以指定起始位置和步長
          >>> 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
          保留對應(yīng)真值為False的元素
          >>> x = itertools.filterfalse(lambda e: e < 5, (153694))
          >>> print(list(x))
          [569]
          itertools.groupby
          按照分組函數(shù)的值對元素進(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
          上文使用過的函數(shù),對迭代器進(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
          簡單的生成一個(gè)擁有指定數(shù)目元素的迭代器
          >>> x = itertools.repeat(05)
          >>> print(list(x))
          [00000]
          itertools.starmap
          類似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))
          ...
          [0123456789]
          [0123456789]
          itertools.zip_longest
          類似于zip,不過已較長的列表和迭代器的長度為準(zhǔn)
          >>> x = itertools.zip_longest(range(3), range(5))
          >>> y = zip(range(3), range(5))
          >>> print(list(x))
          [(00), (11), (22), (None3), (None4)]
          >>> print(list(y))
          [(00), (11), (22)]
          結(jié)語
          大概就總結(jié)到這里,不過老實(shí)說Python的各種語言特性和庫還是要多用才能熟練,最終達(dá)到隨手拈來的程度,裝逼的說就是由術(shù)入道。

          來源:憶先    

          鏈接:segmentfault.com/a/1190000008590958



          福利

          入門Python的最強(qiáng)三件套《ThinkPython》、《簡明Python教程》、《Python進(jìn)階》的PDF電子版已打包提供給大家,關(guān)注下方公眾號(hào),在后臺(tái)回復(fù)關(guān)鍵字P3」即可獲取。






          推薦閱讀:

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


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


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


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


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


          年度爆款文案


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

          瀏覽 30
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  看免费黄色视频 | a级黄色的网站在线观看 | 在线一区二区视频 | 91精品在鸭窝精在线观看不卡 | 天堂国产一区二区三区不卡 |