Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich einen Iterator in Python effizient aufteilen?
Iteratoren in Blöcken iterieren
Stellen Sie sich ein Szenario vor, in dem Sie einen Iterator l = [1, 2, 3, 4, 5, 6 , 7] und möchten es in Blöcke der Größe 3 unterteilen, was zu einem Iterator führt, der [[1, 2, 3], [4, 5, 6], [7]].
itertools-Lösung
Die Python-Standardbibliothek bietet eine praktische Lösung innerhalb des itertools-Moduls:
import itertools def grouper(iterable, n, *, incomplete='fill', fillvalue=None): """Collect data into non-overlapping fixed-length chunks or blocks.""" args = [iter(iterable)] * n if incomplete == 'fill': return zip_longest(*args, fillvalue=fillvalue) elif incomplete == 'strict': return zip(*args, strict=True) elif incomplete == 'ignore': return zip(*args) else: raise ValueError('Expected fill, strict, or ignore') chunks = list(grouper(l, 3)) # Output: [[1, 2, 3], [4, 5, 6], [7]]
Erweiterte Version der Standardbibliothek
Eine spezielle Funktion, Batched, eingeführt in neueren Versionen der itertools-Rezepte, erfüllt genau diese Chunking-Anforderung:
from itertools import batched chunks = list(batched(l, 3)) # Output: [[1, 2, 3], [4, 5, 6], [7]]
Nicht-allgemeine Lösung
Speziell für Sequenzen ein einfacherer Ansatz Die letzten Brocken effektiv verarbeiten ist:
chunks = [my_list[i:i + chunk_size] for i in range(0, len(my_list), chunk_size)]
Das obige ist der detaillierte Inhalt vonWie kann ich einen Iterator in Python effizient aufteilen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!