天天看點

python-itertools

昨天見到了一個python的内模組化塊-itertools。今天總結一下:

itertools提供了非常有用的用于操作疊代對象的函數,整理如下

首先,我們看看itertools提供的幾個“無限”疊代器

  1. count()

    eg:

import itertools
arr = itertools.count(1)
for n in arr:
    print(n)      

這裡會從1開始列印出序列,程式不會結束,除非自己中斷程式。如果上面count()傳2,就會從2開始遞增列印。如下:

python-itertools

2. cycle()

eg::

import itertools
s = itertools.cycle('ABC')
for c in s:
    print(c)      

這個方法會把傳入的一個序列無限重複下去,如下:

python-itertools

3. repeat()

eg:

import itertools
s = itertools.repeat('A', 5)
for n in s:
    print(n)      

負責把一個元素無限重複下去,提供的第二個參數就可以限定重複次數,如下:

python-itertools

注意:

無限序列雖然可以無限疊代下去,但是通常會通過takewhile()等函數根據條件判斷來截取出一個有限的序列

eg:

import itertools
arr = itertools.count(1)
s = itertools.takewhile(lambda x: x <= 10, arr)
for n in s:
    print(n)      

這樣就會列印出1到10,不會無限疊代。

了解itertools提供的幾個疊代器操作函數
  1. chain()

    eg:

import itertools
for c in itertools.chain('ABC', 'XYZ'):
    print(c)      

chain()可以把一組疊代對象串聯起來,形成一個更大的疊代器,看運作結果:

python-itertools

2. groupby()

eg:

import itertools
for key, group in itertools.groupby('AAABBBCCAAA'):
   print(key, list(group))      

把疊代器中相鄰的重複元素挑出來放在一起,

python-itertools

說明:

這裡的挑選規則是通過函數完成的,隻要作用于函數的兩個元素傳回的值相等,這兩個元素就被認為是在一組的,而函數傳回值作為組的key。

import itertools
for key, group in itertools.groupby('AaaBBbcCAAa', lambda c: c.upper()):
   print(key, list(group))      

繼續閱讀