迭代器
# 在python中,迭代器協定是實作物件的__iter()方法和next()方法,其中前者回傳物件本身,後者返回容器的下一個元素。實作了這兩個方法的物件就是可迭代物件。迭代器是有惰性的,只有在使用時才會產生,這就為處理大量資料提供了好處,不同一次性把所有資料寫入記憶體。下面自己寫了一個迭代器,可以看到使用for迴圈可以處理自己寫的迭代器,實作了迭代器協定的對象,可以使用任何類似for迴圈這樣的迭代器工具。但是,看下面的輸出,第二次輸出為空,這是為什麼呢?當我們使用list時,我們可以多次輸出同一個對象,這和實作了自己實作了迭代器協定的對像有什麼不同?
class it(object):<br/>
無限迭代器
1 count(),接受兩個參數,第一個是開始的數字,第二個是步幅,預設從0開始,用法如下
class TestIt(object): def __init__(self, a): self.a = a def __iter__(self): return it(self.a)
2 cycle(),接受一個參數,該參數是迭代器物件(列表,字串等),會循環產生迭代器中的元素
import itertools as it c = it.count(10, 2) for i in c: if i > 20: break print i, # 10 12 14 16 18 20
3 repeat(),接受兩個參數,用於產生第一個參數n次
c = it.cycle([1, 2, 3]) i = 1 for j in c: if i > 7: break print j, i += 1
有限迭代器,選取感覺自己常用的介紹下
#1 chain(),接受多個迭代器物件作為參數,並把它們連接起來chain('abc', [1, 2, 3])
2 compress(data, selectors), 根據後面的參數過濾前面的參數,兩個參數都需要是迭代器物件
3 dropwhile
(pre, iterable),pre參數為函數,當pre(i)是Ture是,傳回該項目以及後面所有項目
4 groupby(iterable[, keyfunc]),其中#iterable 是可迭代對象,keyfunc 是分組函數,用於對iterable 的連續項目被分組,如果不指定,則預設將iterable 中的連續相同項目分組,傳回一個 (key, sub-iterator) 的迭代器。 5 ifilter(function or None, sequence),将 iterable 中 function(item) 为 True 的元素组成一个迭代器返回,如果 function 是 None,则返回 iterable 中所有计算为 True 的项 6 tee(iterable [,n]), <br/> <br/> 组合生成器 1 permutations(iterable[, r]),用于生成一个排列,r是生成排列的元素长度,不指定则为默认长度 <br/> <br/> 2 combinations(iterable, r), 求序列的组合,其中,r 指定生成组合的元素的长度,是必需的参数 3 combinations_with_replacement(iterable, r),生成的组合包含自身元素 更多python迭代器以及itertools模块相关文章请关注PHP中文网!#
tee
用于从 iterable 创建 n 个独立的迭代器,以元组的形式返回,n 的默认值是 2。 for j in it.tee('abc', 4):
print list(j)
list(it.permutations( list(it.permutations(, 2
print list(it.combinations_with_replacement('abc', 2))
# [('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'b'), ('b', 'c'), ('c', 'c')]