イテレーター Python では、イテレーター プロトコルはオブジェクトの __iter() メソッドと next() メソッドを実装します。前者はオブジェクト自体を返し、後者はコンテナーの次の要素を返します。これら 2 つのメソッドを実装するオブジェクトは反復可能オブジェクトです。イテレータは遅延的であり、使用されたときにのみ生成されるため、すべてのデータを一度にメモリに書き込むのとは異なり、大量のデータを処理する場合に利点があります。以下では、自分でイテレータを作成しました。for ループを使用して、イテレータ プロトコルを実装するオブジェクトの場合、for ループと同様のイテレータ ツールを使用できることがわかります。しかし、以下の出力を見ると、2 番目の出力が空になっているのはなぜでしょうか。リストを使用すると、同じオブジェクトを複数回出力できます。これと、独自のイテレータ プロトコルを実装するオブジェクトとの違いは何ですか?
class it(object):def __init__(self, n):
self.a = 0<br/>
class TestIt(object): def __init__(self, a): self.a = a def __iter__(self): return it(self.a)
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
2cycle()はイテレータオブジェクト(リスト、文字列など)である1つのパラメータを受け取り、ループしてイテレータ内の要素を生成します
c = it.cycle([1, 2, 3]) i = 1 for j in c: if i > 7: break print j, i += 1
3repeat()は2つのパラメータを受け入れます、 use 最初のパラメータを n 回生成するには
for j in it.repeat([1, 2, 3], 4): print j
限定イテレータ、よく使うと思うものを選択してください
1chain()、複数のイテレータオブジェクトをパラメータとして受け取り、それらを接続しますchain(' abc', [ 1, 2, 3])
2 compress(data, selectors)、後のパラメータに従って前のパラメータをフィルタリングします。両方のパラメータはイテレータオブジェクトである必要があります
3 dropwhile
(pre, preパラメーターは機能であり、pre(i)がtrueの場合、このアイテムとすべての次の項目を返します。
iterable[,
keyfunc])、ここで iterable は反復可能なオブジェクト、 keyfunc はグループ化関数であり、 iterable の連続する項目をグループ化するために使用されます。指定されていない場合、イテラブル内の連続する同一の項目はデフォルトでグループ化され、 のイテレータが返されます。
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')]