Code, der einen Iterator in Teile von Iteratoren in Python aufteilt. Ich habe im Internet Code gefunden, um die Liste in Blöcke aufzuteilen, aber ich konnte den Code zum Aufteilen des Iterators in Blöcke nicht finden, also habe ich ihn geschrieben.
Wenn Sie eine Liste von Anfang an in Blöcke aufteilen möchten, können Sie einen Index verwenden, und es ist einfach, die Iteratoren zu teilen, während Sie sie auflisten. Um den Iterator jedoch so zu teilen, wie er ist, musste der Unteriterator den Basisiterator über StopIteration informieren, was diese Methode schwierig machte. Immerhin verwende ich eine etwas unangenehme Methode.
Was unangenehm ist, ist, dass ich die Liste erschöpft = [Falsch] verwende, um Werte aus dem Subiter zu übergeben. Wenn Sie es normalerweise als Bool-Wert haben, können Sie nicht von innen nach außen schreiben, daher verwenden wir eine Liste, die ein variables Objekt ist. Die Klasse wird in einer ähnlichen Situation wie die Referenzimplementierung von itertools.groupby in der offiziellen Python-Dokumentation verwendet. Es kann sich also um eine Python-ähnliche Implementierung handeln.
Das Merkmal ist, dass es zu groß wird, wenn es aufgelistet wird, und es kann auch in Fällen, die die Leistung beeinträchtigen, leicht verwendet werden.
def chunk(it, n):
it = iter(it)
exhausted = [False]
def subiter(it, n, exhausted):
for i in range(n):
try:
yield next(it)
except StopIteration:
exhausted[0] = True
while not exhausted[0]:
yield subiter(it, n, exhausted)
Recommended Posts