Iterator In Python besteht das Iteratorprotokoll darin, die __iter()-Methode und die next()-Methode des Objekts zu implementieren, wobei ersteres das Objekt selbst zurückgibt, das das zurückgibt nächstes Element des Containers. Objekte, die diese beiden Methoden implementieren, sind iterierbare Objekte. Iteratoren sind träge und werden nur bei Verwendung generiert, was Vorteile bei der Verarbeitung großer Datenmengen bietet, im Gegensatz zum gleichzeitigen Schreiben aller Daten in den Speicher. Unten habe ich selbst einen Iterator geschrieben. Sie können sehen, dass Sie eine for-Schleife verwenden können, um den von Ihnen geschriebenen Iterator zu verarbeiten. Für Objekte, die das Iterator-Protokoll implementieren, können Sie jedes Iterator-Tool verwenden, das einer for-Schleife ähnelt. Wenn man sich jedoch die Ausgabe unten ansieht, ist die zweite Ausgabe leer. Warum ist das so? Wenn wir eine Liste verwenden, können wir dasselbe Objekt mehrmals ausgeben. Was ist der Unterschied zwischen dieser und einem Objekt, das sein eigenes Iteratorprotokoll implementiert?
class it(object):def __init__(self, n):
self.a = 0<br/>
itertools
class TestIt(object): def __init__(self, a): self.a = a def __iter__(self): return it(self.a)
Unendlicher Iterator
1 count(), akzeptiert zwei Parameter, den ersten ist die Startnummer, die zweite ist der Schritt, standardmäßig beginnend bei 0, die Verwendung ist wie folgt:
2cycle(), akzeptiert einen Parameter, nämlich die Iteration Das Iteratorobjekt (Liste, Zeichenfolge usw.) führt eine Schleife aus, um die Elemente im Iterator zu generieren
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(), das zwei Parameter akzeptiert und zum Generieren des ersten verwendet wird Parameter n mal
c = it.cycle([1, 2, 3]) i = 1 for j in c: if i > 7: break print j, i += 1
begrenzter Iterator, wählen Sie den aus, den Sie Ihrer Meinung nach häufig verwenden, und führen Sie
for j in it.repeat([1, 2, 3], 4): print j
1 chain() ein, das akzeptiert Mehrere Iteratoren Objekte als Parameter und verbinden sie mit der Kette ('abc', [1, 2, 3])
2 komprimieren (Daten, Selektoren), filtern Sie die vorherigen entsprechend den letzteren Parameter Parameter, beide Parameter müssen Iteratorobjekte sein
3 dropwhile
(pre, iterable ) , der pre-Parameter ist eine Funktion. Wenn pre(i) True ist, werden dieses Element und alle folgenden Elemente zurückgegeben
4 groupby(iterierbar[, keyfunc]), wobei iterable ein iterierbares Objekt ist, keyfunc dagegen eine Gruppierungsfunktion, die zum Gruppieren aufeinanderfolgender Elemente in Iterable verwendet wird. Wenn nicht angegeben, gruppiert sie standardmäßig aufeinanderfolgende identische Elemente in Iterable und gibt einen Iterator von zurück. 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中文网!(key, sub-iterator)
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')]