python itertools 用法


1、介紹
itertools 是python的迭代器模塊,itertools提供的工具相當高效且節省內存。
使用這些工具,你將能夠創建自己定制的迭代器用於高效率的循環。
- 無限迭代器
 itertools包自帶了三個可以無限迭代的迭代器。這意味着,當你使用他們時,你要知道要的到底是最終會停止的迭代器,還是需要無限地迭代鞋去。
(1)count(初值=0, 步長=1):count 迭代器會返回從傳入的起始參數開始的均勻間隔的數值。count 也可以接收指定的步長參數。我們來看一個簡單的例子:

 1 from itertools import count
 2 for i in count():
 3     print i
 4     if i > 10:
 5         break
 6         
 7 #從0開始循環
 8 0
 9 1
10 2
11 3
12 4
13 5
14 6
15 7
16 8
17 9
18 10
19 11

(2)islice(count(10), 5):從 10 開始,輸出 5 個元素后結束。islice 的第二個參數控制何時停止迭代。但其含義並不是”達到數字 5 時停止“,而是”當迭代了 5 次之后停止“。

 1 from itertools import count,islice
 2 for i in islice(count(10),5):
 3     print i
 4 
 5 #從10開始循環迭代5次后退出循環
 6 10
 7 11
 8 12
 9 13
10 14

(3)cycle:這里我們創建了一個 for 循環,使其在三個字母 XYZ 間無限循環。當然,我們並不真地想要永遠循環下去,所以我們添加了一個簡單的計數器來跳出循環。

 1 from itertools import cycle
 2 count = 0
 3 for item in cycle('XYZ'):
 4     if count > 7:
 5         break
 6     print item
 7     count = count + 1
 8 
 9 #在xyz之間無限循環
10 X
11 Y
12 Z
13 X
14 Y
15 Z
16 X

(4)accumulate(可迭代對象[, 函數])(適用於python3)
   accumulate 迭代器將返回累計求和結果,或者傳入兩個參數的話,由傳入的函數累積計算的結果。默認設定為相加

  這里,我們 導入了 accumulate,然后傳入 10 個數字,0-9。迭代器將傳入數字依次累加,所以第一個是 0 ,第二個是 0+1, 第三個是 1+2,如此下去。

  現在我們導入 operator 模塊,然后添加進去:

1 >>> from itertools import accumulate
2 >>> list(accumulate(range(10)))
3 [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]

  這里我們傳入了數字 1-4 到 accumulate 迭代器中。我們還傳入了一個函數:operator.mul,這個函數將接收的參數相乘。

  所以每一次迭代,迭代器將以乘法代替除法(1×1=1, 1×2=2, 2×3=6, 以此類推)

1 from itertools import accumulate
2 import operator
3 >>> list(accumulate(range(1, 6), operator.mul))
4 [1, 2, 6, 24, 120]

(5)chain(*可迭代對象)
    chain 可以把一組迭代對象串聯起來,形成一個更大的迭代器:

 1 from itertools import chain
 2 for c in chain(['a','b','cd'],['ef',123],'XYZ'):
 3     print c
 4 
 5 #輸出
 6 a
 7 b
 8 cd
 9 ef
10 123
11 X
12 Y
13 Z
14 
15 #備注類似於多個list疊加
16 mm = ['a','b','cd'] + ['ef',123] + ['X','Y','Z']

 (6)groupby 
     
把迭代器中相鄰的重復元素挑出來放在一起.

 1 from itertools import groupby
 2 
 3 for key, group in groupby('AAABBBCCAAA'):
 4     print key,list(group)
 5 
 6 #輸出
 7 A ['A', 'A', 'A']
 8 B ['B', 'B', 'B']
 9 C ['C', 'C']
10 A ['A', 'A', 'A']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM