Ce face itertools.tee()
Un generator poate fi parcurs o singură dată. tee(it, n) returnează un tuplu de n iteratoare, fiecare producând toate valorile, independent de celelalte. Valorile deja citite de un iterator, dar nu și de celelalte, sunt păstrate în memorie.
După tee(), nu mai folosi iteratorul original. Dacă un iterator consumă aproape tot înaintea celorlalte, o simplă list() este mai eficientă.
Parametri
| Parametru | Descriere |
|---|---|
iterabil |
Sursa. |
n |
Opțional. Numărul de copii. Implicit 2. |
Ce returnează
Un tuplu de iteratoare.
Exemple
Exemplul 1: Două parcurgeri ale aceluiași generator
from itertools import tee
valori = (n * n for n in range(1, 6))
pentru_suma, pentru_maxim = tee(valori)
print(sum(pentru_suma), max(pentru_maxim))
a, b, c = tee("xyz", 3)
print(list(a), next(b), list(c))
Rezultat
55 25
['x', 'y', 'z'] x ['x', 'y', 'z']
Greșeli frecvente
- Continui să folosești iteratorul original după
tee(); copiile pierd valorile consumate astfel.
Comenzi înrudite
iter() și next(): iter() obține un iterator dintr-o colecție; next() ia următorul element din iterator.yield (generatoare): Transformă o funcție într-un generator, care produce valorile una câte una, la cerere.itertools.islice(): Ia o „felie” dintr-un iterator sau generator, ca [start:stop:pas] la liste.