<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 內置庫

          共 4021字,需瀏覽 9分鐘

           ·

          2022-01-20 07:52

          來源:憶先?? ?鏈接:

          https://segmentfault.com/a/1190000008590958

          前言

          最近事情不是很多,想寫一些技術文章分享給大家,同時也對自己一段時間來碎片化接受的知識進行一下梳理,所謂寫清楚才能說清楚,說清楚才能想清楚,就是這個道理了。

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

          itertools庫

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

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

          使用itertools

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

          itertools.accumulate

          簡單來說就是累加。

          >>>?import?itertools
          >>>?x?=?itertools.accumulate(range(10))
          >>>?print(list(x))
          [0,?1,?3,?6,?10,?15,?21,?28,?36,?45]

          itertools.chain

          連接多個列表或者迭代器。

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

          itertools.combinations

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

          >>>?x?=?itertools.combinations(range(4),?3)
          >>>?print(list(x))
          [(0,?1,?2),?(0,?1,?3),?(0,?2,?3),?(1,?2,?3)]

          itertools.combinations_with_replacement

          允許重復元素的組合

          >>>?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),?(True,?False,?True,?True,?False))
          >>>?print(list(x))
          [0,?2,?3]

          itertools.count

          就是一個計數(shù)器,可以指定起始位置和步長

          >>>?x?=?itertools.count(start=20,?step=-1)
          >>>?print(list(itertools.islice(x,?0,?10,?1)))
          [20,?19,?18,?17,?16,?15,?14,?13,?12,?11]

          itertools.cycle

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

          >>>?x?=?itertools.cycle('ABC')
          >>>?print(list(itertools.islice(x,?0,?10,?1)))
          ['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))
          [5,?6,?7,?8,?9]

          itertools.filterfalse

          保留對應真值為False的元素

          >>>?x?=?itertools.filterfalse(lambda?e:?e?5,?(1,?5,?3,?6,?9,?4))
          >>>?print(list(x))
          [5,?6,?9]

          itertools.groupby

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

          >>>?x?=?itertools.groupby(range(10),?lambda?x:?x?5?or?x?>?8)????????????????????????????????????????????????????????????????????????????????????????????????
          >>>?for?condition,?numbers?in?x:??????????????????????????????????????????????????
          ...?????print(condition,?list(numbers))????????????????????????????????????????????????????????????????????????????????????????????????????????
          True?[0,?1,?2,?3,?4]??????????????????????????????????????????????????????????????
          False?[5,?6,?7,?8]????????????????????????????????????????????????????????????????
          True?[9]

          itertools.islice

          上文使用過的函數(shù),對迭代器進行切片

          >>>?x?=?itertools.islice(range(10),?0,?9,?2)
          >>>?print(list(x))
          [0,?2,?4,?6,?8]

          itertools.permutations

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

          >>>?x?=?itertools.permutations(range(4),?3)
          >>>?print(list(x))
          [(0,?1,?2),?(0,?1,?3),?(0,?2,?1),?(0,?2,?3),?(0,?3,?1),?(0,?3,?2),?(1,?0,?2),?(1,?0,?3),?(1,?2,?0),?(1,?2,?3),?(1,?3,?0),?(1,?3,?2),?(2,?0,?1),?(2,?0,3),?(2,?1,?0),?(2,?1,?3),?(2,?3,?0),?(2,?3,?1),?(3,?0,?1),?(3,?0,?2),?(3,?1,?0),?(3,?1,?2),?(3,?2,?0),?(3,?2,?1)]

          itertools.product

          產生多個列表和迭代器的(積)

          >>>?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

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

          >>>?x?=?itertools.repeat(0,?5)
          >>>?print(list(x))
          [0,?0,?0,?0,?0]

          itertools.starmap

          類似map

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

          itertools.takewhile

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

          >>>?x?=?itertools.takewhile(lambda?e:?e?5,?range(10))
          >>>?print(list(x))
          [0,?1,?2,?3,?4]

          itertools.tee

          這個函數(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

          類似于zip,不過已較長的列表和迭代器的長度為準

          >>>?x?=?itertools.zip_longest(range(3),?range(5))
          >>>?y?=?zip(range(3),?range(5))
          >>>?print(list(x))
          [(0,?0),?(1,?1),?(2,?2),?(None,?3),?(None,?4)]
          >>>?print(list(y))
          [(0,?0),?(1,?1),?(2,?2)]

          結語

          大概就總結到這里,不過老實說Python的各種語言特性和庫還是要多用才能熟練,最終達到隨手拈來的程度,裝逼的說就是由術入道。



          當然Python相關的電子書我也給整理好了在下面??


          瀏覽 37
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产精品福利视频导航 | 亚洲女人在线观看 | 久久久久成人精品 | 亚洲最大中文字幕 | 美女靠逼在线观看 |