Ce face itertools.count(), cycle() și repeat()
count(start, step) produce start, start + step, … la nesfârșit (merge și cu numere zecimale). cycle(colectie) repetă elementele colecției în buclă. repeat(x, n) produce valoarea x de n ori, sau la infinit fără n.
Se combină de obicei cu zip(), islice() sau map(), care le opresc la un moment dat.
Parametri
| Parametru | Descriere |
|---|---|
start, step |
Pentru count: primul număr și pasul. |
iterabil |
Pentru cycle: elementele repetate. |
obiect, times |
Pentru repeat: valoarea și numărul de repetări. |
Ce returnează
Un iterator (infinit, cu excepția lui repeat cu times).
Exemple
Exemplul 1: Numerotare, alternanță și repetare
from itertools import count, cycle, repeat
for nr, nume in zip(count(101), ["Ana", "Dan", "Ioana"]):
print(nr, nume)
culori = cycle(["alb", "gri"])
for rand in ["r1", "r2", "r3", "r4", "r5"]:
print(rand, next(culori), end="; ")
print()
print(list(repeat("-", 5)))
print(list(map(pow, range(5), repeat(2))))
Rezultat
101 Ana
102 Dan
103 Ioana
r1 alb; r2 gri; r3 alb; r4 gri; r5 alb;
['-', '-', '-', '-', '-']
[0, 1, 4, 9, 16]
Greșeli frecvente
- Transformi direct în listă un iterator infinit:
list(count())nu se termină niciodată.
Comenzi înrudite
itertools.islice(): Ia o „felie” dintr-un iterator sau generator, ca [start:stop:pas] la liste.zip(): Parcurge mai multe colecții în paralel și le grupează element cu element.enumerate(): Parcurge o colecție și dă, pentru fiecare element, și poziția lui.deque: rotate(), extendleft() și celelalte metode: Rotirea unui deque și restul metodelor lui, asemănătoare cu cele ale listelor.